4

次のコードを検討してください。

var x = 0;

var o = {};

function getter() {
    return x;
}

Object.defineProperty(o, "y", {
    get: getter,
    set: function (y) {
        x = y;

        Object.defineProperty(o, "y", {
            get: getter
        });
    },
    configurable: true
});

o.y私の目的は、セッターが一度呼び出された後、セッターを削除してプロパティを構成不可にすることです。ただし、期待どおりに機能しません。

> x       // 0
> o.y     // 0
> o.y = 1 // 1
> x       // 1
> o.y     // 1
> o.y = 2 // 2
> x       // 2
> o.y     // 2

そのため、私のコードは期待どおりに機能せず、他の解決策は考えられません。したがって、この質問。

4

1 に答える 1

9

再定義操作を次のように考えてください。新しい定義の各キーは、古い定義の対応するキーを置き換えます。setプロパティを再定義するときにキーを指定しないため、古い値が保持されます。

undefinedそれを取り除くために明示的に含める必要があります。実際、ゲッターを変更していないため、ゲッターを設定する必要はまったくありません。

Object.defineProperty(o, "y", {
    set: undefined
});

次に、私のテストでは:

o.y     // 0
o.y = 1
o.y     // 1
o.y = 2
o.y     // 1
于 2014-10-03T05:17:22.217 に答える