为了账号安全,请及时绑定邮箱和手机立即绑定

调用 Proxy 对象中的 get 方法而不是 set 方法

调用 Proxy 对象中的 get 方法而不是 set 方法

拉风的咖菲猫 2023-09-07 14:38:10
我开始研究 JavaScript 代理对象,并遇到了一些奇怪的行为。我正在尝试将一个数字推送到代理数组,但是,出乎我意料的是,get方法被调用(如果存在)!但是,如果我删除get中的方法arrayHandler,set则会按预期调用,并且数字会被推送。为什么可能呢?class SomeClass {    public readonly name: String;    public originalData: Array<number> = [];    private arrayHandler = {        set(            target: Array<number>,            prop: number,            val: any,            reciever: any        ): boolean {            console.log("PROXY HANDLER SET");            target[prop] = val;            return true;        },        get(target: Array<number>, prop: number): void {            console.log("PROXY HANDLER GET");        },    };    public proxyToArray: any = new Proxy(this.originalData, this.arrayHandler);    constructor(name: String) {        this.name = name;    }}let item = new SomeClass("item-1");item.proxyToArray.push(1);
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

您需要在 getter 中返回目标:


class SomeClass {

    public readonly name: String;

    public originalData: Array<number> = [];


    private arrayHandler = {

        set(

            target: Array<number>,

            prop: number,

            val: any,

            reciever: any

        ): boolean {

            console.log("PROXY HANDLER SET");

            target[prop] = val;

            return true;

        },

        get(target: Array<number>, prop: number): any {

            console.log("PROXY HANDLER GET");

            return target[prop];

        },

    };

    public proxyToArray: any = new Proxy(this.originalData, this.arrayHandler);


    constructor(name: String) {

        this.name = name;

    }

}


let item = new SomeClass("item-1");

item.proxyToArray.push(1);


查看完整回答
反对 回复 2023-09-07
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信