Object
é Eva, e Function
é Adão, Adão ( Function
) usa seu osso ( Function.prototype
) para criar Eva ( Object
). Então quem criou Adam ( Function
)? - O inventor da linguagem JavaScript :-).
De acordo com a resposta da utsaina, quero adicionar mais informações úteis.
A coisa mais surpreendente para mim foi descobrir que Object.__proto__
aponta para Function.prototype
, em vez de Object.prototype
, mas tenho certeza de que há uma boa razão para isso :-)
Não deveria ser. Object.__proto__
NÃO deve apontar para Object.prototype
. Em vez disso, a instância de Object
o
, o.__proto__
deve apontar paraObject.prototype
.
(Perdoe-me por usar os termos class
einstance
em JavaScript, mas você sabe disso :-)
Eu acho que a classe em Object
si é uma instância Function
, é por isso Object.__proto__ === Function.prototype
. Portanto: Object
é Eva, e Function
é Adão, Adão ( Function
) usa seu osso ( Function.prototype
) para criar Eva (Object
).
Além disso, até a Function
própria classe é uma instância de Function
si mesma, ou seja,Function.__proto__ === Function.prototype
, é também por isso queFunction === Function.constructor
Além disso, a classe regular Cat
é uma instância de Function
, isto é Cat.__proto__ === Function.prototype
.
A razão para o exposto acima é que, quando criamos uma classe em JavaScript, na verdade, estamos apenas criando uma função, que deve ser uma instância de Function
. Object
e Function
são apenas especiais, mas ainda são aulas, enquanto Cat
é uma aula regular.
Por uma questão de fator, no mecanismo JavaScript do Google Chrome, os seguintes 4:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Eles são todos ===
(absolutamente iguais) aos outros 3, e seu valor é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
ESTÁ BEM. Então quem cria o special function Empty() {}
( Function.prototype
)? Pense nisso :-)