介绍
defineProperty方法拦截Object.defineProperty操作
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
直接看代码吧
{
var handler = {
defineProperty:function(target,key,descriptor) {
console.log(descriptor);
target[key] = descriptor.value;
// return false;
}
};
var target = {};
var proxy = new Proxy(target,handler);
proxy.foo = 'bar'
console.log('proxy添加新的属性:',proxy);
}
//经过上面的实例可得出Proxy代理内的definneProperty方法return true/false并没有任何意义。
//当目标对象添加属性的方法被拦截defineProperty方法若不添加 **target[key] = descriptor.value;**,则不能添加属性。
//注意,如果目标对象不可扩展(non-extensible),则defineProperty不能增加目标对象上不存在的属性
//否则会报错。另外,如果目标对象的某个属性不可写(writable)或不可配置(configurable),
//则defineProperty方法不得改变这两个设置。