このJSMDNページには、次のように書かれています。
JavaScript1.8.1ノート
JavaScript 1.8.1以降、オブジェクトおよび配列の初期化子でプロパティを設定するときにセッターが呼び出されなくなりました。
これが私に何を伝えようとしているのか理解できません。
このJSMDNページには、次のように書かれています。
JavaScript1.8.1ノート
JavaScript 1.8.1以降、オブジェクトおよび配列の初期化子でプロパティを設定するときにセッターが呼び出されなくなりました。
これが私に何を伝えようとしているのか理解できません。
このコード スニペット:
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.seven
れ7
ます。
これは、JSON ハイジャックの問題を指していると思います。見て
この削除された質問から私の回答を再投稿するには:
仕様によると、配列 ( EcmaScript 5.1 §11.1.4 ) もオブジェクト リテラル ( EcmaScript 5.1 §11.1.5 ) もハイジャック可能であってはなりません。
- 彼らは「その名前の標準組み込みコンストラクター
window.Array
」と呼びます。window.Object
- 彼らは [[defineOwnProperty]] を使用しますが、これは のセッターをまったく処理しません
Object.prototype
。
現在、これは ES 5.1 準拠のブラウザでは問題になりません。