5

このJSMDNページには、次のように書かれています。

JavaScript1.8.1ノート

JavaScript 1.8.1以降、オブジェクトおよび配列の初期化子でプロパティを設定するときにセッターが呼び出されなくなりました。

これが私に何を伝えようとしているのか理解できません。

4

2 に答える 2

7

このコード スニペット:

var o = {};
o.seven = 7;

そしてこのコードスニペット:

var o = { seven: 7 };

通常は同等です。ただし、このコード スニペットが前にある場合:

Object.prototype.__defineSetter__('seven', function(x) { alert(x); });

その場合、前者のみがアラートを出し7(setter は によって呼び出されo.seven = 7、 によってではなく呼び出されるためo = { seven: 7 })、後者のみが実際に に設定さo.seven7ます。

于 2012-10-23T22:50:23.520 に答える
4

これは、JSON ハイジャックの問題を指していると思います。見て

この削除された質問から私の回答を再投稿するには:

仕様によると、配列 ( EcmaScript 5.1 §11.1.4 ) もオブジェクト リテラル ( EcmaScript 5.1 §11.1.5 ) もハイジャック可能であってはなりません。

  • 彼らは「その名前の標準組み込みコンストラクターwindow.Array」と呼びます。window.Object
  • 彼らは [[defineOwnProperty]] を使用しますが、これは のセッターをまったく処理しませんObject.prototype

現在、これは ES 5.1 準拠のブラウザでは問題になりません。

于 2012-10-23T23:15:52.877 に答える