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
)?考虑一下:-)