You can overwrite Object in Chrome/V8 and bad things happen if you do. Typing the following gets these responses.
> Object
function Object() { [native code] }
> Number
function Number() { [native code] }
Looking at Number.prototype we can see a full set of methods and Object as Number's prototype:
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] }
But if we overwrite Object
Object = {}
Number's prototype goes a bit wonky:
Number.prototype
> Number
...empty...
As Object is the root of the hierarchy there's a bit of a paradox if you reassign it to another object.
''+Object'is"function Object() { [native code] }"...so it's not implemented in JS.