Reflect是反射的意思。
Proxy和Reflect是ES6为了操作对象引入的API.
Reflect可以用于获取目标对象的行为。它与Object类似,但是更易读,为操作对象提供了一种更优雅的方式。它的方法与Proxy是对应的。
ES6中将Object的一些明显属于语言内部的方法移植到Reflect对象上。
//如果需要增强方法的功能,基本上需要配合Reflect反射来使用。
Reflect.apply(target,ctx,args)
function sum(a, b) {
//console.log(this);
//console.log(arguments);
return a + b;
}
let newSum = new Proxy(sum, { //拦截sum函数
apply(target, ctx, args) {
//target:调用的方法(函数)
//ctx:this指向
//args:参数数组
console.log(target); //sum函数
console.log(ctx); //undefined
console.log(args); //[1,2]
console.log(arguments); //参数列表
return Reflect.apply(...arguments) * 2; //使用反射,使sum函数执行通过
}
})
console.log(newSum(1, 2)); //6
sum.apply("abc", [1, 2]); //this指向String{"abc"}
console.log(‘assign‘ in Object); //true
//查看对象是否有某个属性
console.log(Reflect.has(Object, ‘assign‘)); //true
//删除属性
let obj = {
name: ‘张三‘,
age: 18
}
// delete obj.name;
Reflect.deleteProperty(obj, ‘name‘);
console.log(obj);
原文:https://www.cnblogs.com/sheepyj/p/13795749.html