调用 get 方法而不是在 Proxy 对象中设置

Invocation of get method instead of set in Proxy object

程序员们!我开始研究 JavaScript 代理对象并遇到了一些奇怪的行为。 我试图将一个数字推送到代理数组,但是,对我来说出乎意料的是,调用了 get 方法,如果它存在 !但是,如果我删除 arrayHandler 中的 get 方法,则会按预期调用 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);

您需要 return 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);