javascript代理construct()和apply()方法的写法和调用

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())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值