基本概念
反映是一个内置的对象,提供了拦截Java脚本语言操作的方法(主要作用)。它将部分属于语言内部的方法转移到显示上去,比如定义性能。优化了一部分函数的返回结果,它的风格上倾向于函数式编程,保留对象的默认行为(代理人),没有构造函数,所有的属性方法都是静态的,类似数学。显示和代理是一一对应的,所有代理可以拦截的属性,反映提供一个默认。
静态方法
get,取值操作,不存在返回未定义的Reflect.get(目标,propertyKey[,receiver]);内部这绑定接收方定义变量对象1={ 0
a: 1,
b: 2,
获取c(){ 0
归还这个。
},
};
var object2={
a: 4,
b: 4,
};
Reflect.get(object1,' c ');
//3
Reflect.get(object1,' c ',object 2);
//8
设置,赋值操作Reflect.set(target,propertyKey,value[,receiver]);
同得到一样,也是内部这绑定接收器。var object1={
a: 1,
设置b(值){ 0
返回this.a=值;
},
};
var object2={
a: 0,
};
Reflect.set(object1,' b ',2,object 2);
//真
目标一
//{a:1}
目标2
//{a:2}
object1.foo
//未定义
object2.foo
//未定义
与代理同时使用,传递听筒会触发定义性能,触发定义属性的前提是一定要先传递接收器。让对象={ 0
a: 1
};
let handler={
设置(目标、键、值、接收器){ 0
console.log('set value ',value);
反射集(目标、键、值、接收器)
},
定义属性(目标、键、属性){ 0
控制台。日志(' defineperoperty ',属性);
reflect . defineperproperty(目标、键、属性);
}
};
让obj=新的代理(对象,处理程序);
物体。a=2;
//设置值2
定义属性{value: 2}
2
已经,对象是否包含某个属性,返回勤恳的咖啡值Reflect.has(目标,属性键);
定义变量对象={ 0
a: 1,
};
Reflect.has(object,' a ');
//真
删除属性,删除某个属性,返回勤恳的咖啡值Reflect.deleteProperty(目标,属性键);
定义变量对象={ 0
a: 1,
};
Reflect.deleteProperty(对象,“一”);
//真
新建操作Reflect.construct(target,argumentsList[,new target]);
函数教师(姓名){ 0
this.name=name
}
const eric=Reflect.construct(教师,[' Eric ']);
//教师{姓名:‘埃里克’
getPrototypeOf,读取样机属性Reflect.getPrototypeOf(目标);
函数教师(姓名){ 0
this.name=name
}
const eric=Reflect.construct(教师,[' Eric ']);
反思。getprototypeof(Eric)===老师。原型;
//真
设置协议类型,设置目标对象原型,返回勤恳的咖啡值Reflect.setPrototypeOf(目标,原型);
常数对象={ };
Reflect.setPrototypeOf(对象,数组。原型);
对象长度;
//0
应用,绑定这对象执行给定函数Reflect.apply(target,thisArgument,arguments list);
const list=[1,2,3,4,5,6];
常数最小值=反射.应用(数学。最小,数学,列表);
定义性能,对象定义属性reflect . defineperproperty(目标、属性键、属性);
让对象={ };
reflect . defineperproperty(对象,"名称",{ 0
价值: '埃里克'
});
//{name: 'Eric'}
getowntpropertysdescriptor,获取指定属性的描述对象反思。getowntpropertysdescriptor(目标,属性键);
我是可扩展的,返回指定对象是否可扩展反思。isextensable(目标);
预防措施,阻止对象扩展Reflect.preventExtensions(目标);
var empty={ };
Reflect.isExtensible(空);
/* true */
Reflect.preventExtensions(空);
Reflect.isExtensible(空);
//false
ownKeys,返回对象的所有属性(包含符号)Reflect.ownKeys(目标);
定义变量对象={ 0
a: 1,
b: 2,
[符号。对于(' c')]: 3,
[符号。对于(' d')]: 4,
};
Reflect.ownKeys(对象);
//['a ',' b ',符号(三),符号[d]