Object
es Eva, y Function
es Adán, Adán ( Function
) usa su hueso ( Function.prototype
) para crear Eva ( Object
). Entonces, ¿quién creó a Adam ( Function
)? - El inventor del lenguaje JavaScript :-).
Según la respuesta de utsaina, quiero agregar más información útil.
Lo más sorprendente para mí fue descubrir que Object.__proto__
apunta a Function.prototype
, en lugar de Object.prototype
, pero estoy seguro de que hay una buena razón para eso :-)
NO debería ser. Object.__proto__
NO debería señalar Object.prototype
. En cambio, la instancia de Object
o
, o.__proto__
debería apuntar aObject.prototype
.
(Perdóname por usar los términos class
yinstance
en JavaScript, pero lo sabes :-)
Creo que la clase en Object
sí es una instancia de Function
, por eso Object.__proto__ === Function.prototype
. Por lo tanto: Object
es Eva, y Function
es Adán, Adán ( Function
) usa su hueso ( Function.prototype
) para crear Eva (Object
).
Además, incluso la clase Function
misma es una instancia de Function
sí misma, es Function.__proto__ === Function.prototype
decir, también es por esoFunction === Function.constructor
Además, la clase regular Cat
es una instancia de Function
, es decir Cat.__proto__ === Function.prototype
.
La razón de lo anterior es, cuando creamos una clase en JavaScript, en realidad, solo estamos creando una función, que debería ser una instancia de Function
. Object
y Function
son simplemente especiales, pero siguen siendo clases, mientras que Cat
es una clase regular.
Como cuestión de factor, en el motor JavaScript de Google Chrome, los siguientes 4:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Todos son ===
(absolutamente iguales) a los otros 3, y su valor esfunction 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
OKAY. Entonces, ¿quién crea el especial function Empty() {}
( Function.prototype
)? Piénsalo :-)