2

でオブジェクト プロパティを定義しますObject.defineProperty。しかし、どうすれば設定を解除できますか?

delete foo.bar(プロパティはどこにありますか)で設定を解除しようとしましたbarが、機能しないようです:

var foo = {};
Object.defineProperty(foo, "bar", {
    get: function () {
        console.log("first call");
        delete foo.bar;
        var value = 3;
        foo.bar = value;               
        return value;            
    }
  , writeable: true
  , enumerable: true
});
console.log(foo.bar);
console.log(foo.bar);

出力は次のとおりです。

first call
3
first call
3

次の出力が期待されていました。

first call
3
3

アイデアは、最初の後にgetプロパティを値に置き換えたいということです。

これはどのように行うことができますか?

4

2 に答える 2

2

configurable関数にオプションを渡すとdefineProperty、問題が修正されます。

var foo = {};
Object.defineProperty(foo, "bar", {
    get: function () {
        console.log("first call");
        delete foo.bar;
        var value = 3;
        foo.bar = value;
        return value;
    }
  , writeable: true
  , enumerable: true
  , configurable: true
});
console.log(foo.bar);
console.log(foo.bar);

出力:

first call
3
3

ドキュメントから:

configurable

trueこのプロパティ記述子の型が変更される可能性があり、対応するオブジェクトからプロパティが削除される可能性がある場合に限ります。

デフォルトはfalseです。

于 2014-12-24T08:03:54.250 に答える
0

削除を許可するには、構成可能なプロパティを設定する必要がありますがconfigurable: true 、ベスト プラクティスとして、データ プロパティとアクセサ プロパティを混同しないでください。

于 2014-12-24T08:10:32.970 に答える