Reflect

一:概括

(1)将Object对象的一些明显的内部语言放进了Reflect对象中,在未来的新方法将只部署到Reflect上。

(2)修改某些Object方法返回的结果更加合理。比如在Object无法定义属性时会报错,但是Reflect不会。

//Object
try{
 Object.defineProperty(target,property,attributes)
//success
}catch(e){
 //failure
}

//Reflect

if(Reflect.defineProperty(target,property,attributes)){
  //success
}else{
 failure
}

(3)让Object操作都变成函数行为,比如之前的in,delete 命令式方法都变成函数方法

//Object

'assign' in Object //true

//Reflect
Reflect.has(Object,'assign'); //true

(4)Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。这就可以用Proxy方法调用对应的Reflect方法完成默认行为。

Proxy(target,{
set:function(target,name,value,receiver){
 var success = Reflect.set(target,name,value,receiver);
   if(success){
     console.log('property' + name + 'on set to' +value) 
   } 
  return success
}
})
Proxy.name = '你好'
console.log(Proxy.name) 'property name on set to 你好'

//Proxy对象拦截了target对象的属性赋值行为,然后采用Reflect.set()将值赋值给对象的属性,确保完成原有的行为,然后再部署额外的功能。

 常用的几种方法

  注:如果第一参数不是对象则报错

(1)Reflect.get(target,name,receiver)

  返回target对象的那么属性,如果没有该属性,则返回undefined

//没有部署读取函数
var obj = {
 foo:2 
}
var myObj = {
foo:3
}

Reflect.get(obj,'foo')// 2
Reflect.get(obj,'foo',myObj)// 2

//部署读取函数,读取函数的this会绑定到receiver
var obj = {
 get bar(){
   console.log(this)
 } 
}
var myObj = {
    foo:3
}

Reflect.get(obj,'bar')// obj,因为没有receiver参数
Reflect.get(obj,'bar',myObj)// myObj 

(2)Reflect.set(target,name,value,receiver)

  设置target的name属性等于value

//有设置赋值函数,但是没有receiver参数
var obj ={
 foo:2
 set bar(value){
   return this.foo = value;  
 } 
}

console.log(obj.foo) //1

Reflect.set(obj,'foo',2) 

console.log(obj.foo) //2

Reflect.set(obj,'bar',3) 

console.log(obj.foo) //3

//有设置赋值函数,则赋值函数的this绑定receiver,存在receiver参数
var obj= {
  foo: 4,
  set bar(value) {
    return this.foo = value;
  },
};

var myObj= {
  foo: 0,


Reflect.set(obj,
'bar',5,myObj); //赋值函数的this,即obj的this指向了myObj。所以myObj的foo被赋值了。 console.log(myObj.foo) //5

 

转载于:https://www.cnblogs.com/MJ-MY/p/11257765.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值