Chrome/V8 では Object を上書きできますが、そうすると悪いことが起こります。次のように入力すると、これらの応答が得られます。
> Object
function Object() { [native code] }
> Number
function Number() { [native code] }
Number.prototype を見ると、Number のプロトタイプとしてメソッドとオブジェクトの完全なセットが表示されます。
Number
constructor: function Number() { [native code] }
toExponential: function toExponential() { [native code] }
toFixed: function toFixed() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toPrecision: function toPrecision() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
しかし、オブジェクトを上書きすると
Object = {}
Number のプロトタイプは少し不安定です。
Number.prototype
> Number
...empty...
オブジェクトは階層のルートであるため、別のオブジェクトに再割り当てすると、少し矛盾が生じます。