Object是夏娃,Function也是亚当,亚当(Function)用他的骨头(Function.prototype)创造了夏娃(Object)。那么谁创造了亚当(Function)?-- JavaScript 语言的发明者 :-)。
根据utsaina的回答,我想添加更多有用的信息。
对我来说最令人惊讶的是发现它Object.__proto__
指向Function.prototype, 而不是Object.prototype,但我相信这是有充分理由的 :-)
不应该。 Object.__proto__不应该指向Object.prototype. 相反,实例Object o,o.__proto__应指向Object.prototype。
(请原谅我使用的条款class和instance在JavaScript,但你知道它:-)
我认为类Object本身是 的一个实例Function,这就是为什么Object.__proto__ === Function.prototype. 因此:Object是夏娃,Function也是亚当,亚当(Function)用他的骨头(Function.prototype)创造了夏娃(Object)。
此外,即使类Function本身也是它自己的一个实例Function,也就是说Function.__proto__ === Function.prototype,这也是为什么Function === Function.constructor
此外,常规类Cat是 的实例Function,即Cat.__proto__ === Function.prototype。
上面的原因是,当我们在 JavaScript 中创建一个类时,实际上我们只是在创建一个函数,它应该是Function. Object和Function只是特殊,但他们仍然是class,而是Cat普通class。
作为一个因素,在 Google Chrome JavaScript 引擎中,有以下 4 个:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
它们都===(绝对等于)其他 3 个,它们的值是function Empty() {}
> Function.prototype
function Empty() {}
> Function.__proto__
function Empty() {}
> Object.__proto__
function Empty() {}
> Cat.__proto__
function Empty() {}
> Function.prototype === Function.__proto__
true
> Function.__proto__ === Object.__proto__
true
> Object.__proto__ === Cat.__proto__
true
行。那么谁创造了特殊的function Empty() {}( Function.prototype)?考虑一下:-)