es5 ajax传对象参数,JS(三)

● 对象深度克隆的简单实现

function deepClone(obj){

var newObj= obj instanceof Array ? []:{};

for(var item in obj){

var temple= typeof obj[item] == 'object' ? deepClone(obj[item]):obj[item];

newObj[item] = temple;

}

return newObj;

}

ES5的常用的对象克隆的一种方式。注意数组是对象,但是跟对象又有一定区别,所以我们一开始判断了一些类型,决定newObj是对象还是数组~

● 实现一个once函数,传入函数参数只执行一次

function ones(func){

var tag=true;

return function(){

if(tag==true){

func.apply(null,arguments);

tag=false;

}

return undefined

}

}

● 将原生的ajax封装成promise

var myNewAjax=function(url){

return new Promise(function(resolve,reject){

var xhr = new XMLHttpRequest();

xhr.open('get',url);

xhr.send(data);

xhr.onreadystatechange=function(){

if(xhr.status==200&&readyState==4){

var json=JSON.parse(xhr.responseText);

resolve(json)

}else if(xhr.readyState==4&&xhr.status!=200){

reject('error');

}

}

})

}

● js监听对象属性的改变

(1)在ES5中可以通过Object.defineProperty来实现已有属性的监听

Object.defineProperty(user,'name',{

set:function(key,value){

}

})

缺点:如果id不在user对象中,则不能监听id的变化

(2)在ES6中可以通过Proxy来实现

var user = new Proxy({},{

set:function(target,key,value,receiver){

}

})

这样即使有属性在user中不存在,通过user.id来定义也同样可以这样监听这个属性的变化哦~

● 如何实现一个私有变量,用getName方法可以访问,不能直接访问

(1)通过defineProperty来实现

obj={

name:yuxiaoliang,

getName:function(){

return this.name

}

}

object.defineProperty(obj,"name",{

Enumerable: false

}}

//不可枚举不可配置

(2)通过函数的创建形式

function product(){

var name='yuxiaoliang';

this.getName=function(){

return name;

}

}

var obj=new product();

● == 和 ===、以及Object.is的区别

(1) ==

主要存在:强制转换成number,null==undefined

" "==0 //true

"0"==0 //true

" " !="0" //true

123=="123" //true

null==undefined //true

(2)Object.js

主要的区别就是+0!=-0 而NaN == NaN

(相对比=== 和==的改进)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值