ES3 8.6.2.3 step 5

https://mail.mozilla.org/pipermail/es-discuss/2011-February/012839.html

[[Prototype]] の ReadOnly*1が子孫に伝播する話。

Object.prototype = 0
Object.prototype + '' // [object Object]

Object.prototype は書き込み禁止なので代入が無視される*2

o = {__proto__: Object}
o.prototype = 1
o.prototype + '' // [object Object]

[[Prototype]] の同名プロパティが書き込み禁止なので代入不可。

o = {__proto__: Object, prototype: 2}
o.prototype = 3
o.prototype // 3

初期化時に隠してしまうと代入可。


Fx3.6.13 で確認。Dmitry の指摘通り、非直感的な仕様だと思う。

*1:ES5 の Writable

*2:strict mode ならエラー