const myTarget={
sayHi(){
return 'HI';
}
};
//这里是代理属性方法的设置和检测方法
const proxy=new Proxy(myTarget,{
set(target,property,value,receiver){
console.log('set property success');
return Reflect.set(...arguments);
},
get(target,property,receiver)
{
return Reflect.get(...arguments);
},
has(target,property)
{
return Reflect.has(...arguments);
},
defineProperty(target,property,descriptor)
{
console.log('设置默认属性成功');
return Reflect.defineProperty(...arguments);
},
getOwnPropertyDescriptor(target,property)
{
return Reflect.getOwnPropertyDescriptor(...arguments);
},
deleteProperty(target,property)
{
console.log('deletePropery');
return Reflect.deleteProperty(...arguments);
},
getPropertyOf(target)
{
return Reflect.getPrototypeOf(...arguments);
},
ownKeys(target)
{
console.log('查看属性');
return Reflect.ownKeys(...arguments);
},
setPrototypeOf(target,prototype)
{
return Reflect.setPrototypeOf(...arguments);
},
getPrototypeOf(target)
{
return Reflect.getPrototypeOf(...arguments);
},
isExtensible(target)
{
console.log('isExtensible()');
return Reflect.isExtensible(...arguments);
},
preventExtensions(target)
{
console.log('preventExtensions()');
return Reflect.preventExtensions(...arguments);
},
apply(target,thisArg,...argumentsList)
{
console.log('apply()');
return Reflect.apply(...arguments);
},
construct(target,argumentsList,newTarget)
{
return Reflect.construct(...arguments);
}
});
Object.defineProperty(proxy,'bar',{value:'bbb',enumerable:true});
proxy.foo='bar';
//下面是关于construct()和 apply()方法的写法和调用
function Sum2(a,b)
{
if(this instanceof Sum2)
{
this.a=a;
this.b=b;
this.sum=function()
{
return this.a+this.b;
}
}else
{
return new Sum2(a,b);
}
}
const proxy1=new Proxy(Sum2,{
construct(target,args)
{
return Reflect.construct(...arguments);
},
apply(target,thisArg,...argumentsList)
{
console.log('apply()');
return Reflect.apply(...arguments);
}
});
console.log(proxy1.apply(this,[5,6]).sum())
javascript代理construct()和apply()方法的写法和调用
最新推荐文章于 2025-02-18 11:26:43 发布