你可以覆盖 Chrome/V8 中的 Object,如果你这样做了,就会发生不好的事情。键入以下内容将获得这些响应。
> Object
function Object() { [native code] }
> Number
function Number() { [native code] }
查看 Number.prototype 我们可以看到一整套方法和 Object 作为 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
Object = {}
Number 的原型有点奇怪:
Number.prototype
> Number
...empty...
由于 Object 是层次结构的根,因此如果将其重新分配给另一个对象,则会出现一些悖论。