Nightly で __proto__ の挙動が変わった
以前、__proto__プロパティの不思議というものを書いたが、Firefox Nightlyで、この __proto__ プロパティに変更が入った。
Firefoxでは元々、Object.prototype
のプロパティに __proto__ があり、それは変わっていないが、Descriptor が変わっている。
Nightly以外
Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); /* { confiburable: false, enumerable: false, value: null, writable: true } */
Nightly
Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); /* { confiburable: true, enumerable: false, get: function () { [native code] }, set: function () { [native code] } } */
とまあ、DataDescriptor から AccessorDescriptor に変更されている。
さらに、面白いことに、configurable が true に変わっている。何を意味するか。これは、delete できるということである。
delete できると?
"__proto__"という名前のプロパティを簡単に作成できるようになる。簡単になるというだけで、definePropertyを使えば今までもできたけどね。
JSON.stringify({ __proto__: "HGOE" }); // '{}' delete Object.prototype.__proto__; JSON.stringify({ __proto__: "HOGE" }); // '{"__proto__":"HOGE"}' var obj = {}; obj.__proto__ = 5; obj.__proto__; // 5