La propiedad prototype
de una función contiene el objeto desde el que heredarán todas las instancias de esa función cuando se cree con el operador new
. Y todos estos objetos prototipo (por lo general) tienen una propiedad constructor
que apunta a la función, allí tiene la referencia circular. Entonces, como new test()
hereda esa propiedad, (new test).constructor === test
evalúa a true
.
Tendrá que distinguir entre la propiedad prototype
de un objeto de función y el objeto prototipo del que hereda un objeto, a menudo denominado "la propiedad interna [[prototype]]
".
Un constructor es una función, por no decir un Function
, y tiene ambos. Por lo tanto, hereda del objeto Function.prototype
, donde la propiedad constructor
dice que todas las funciones están construidas por el constructor Function
. Si su consola de desarrolladores muestra el prototipo de los objetos Function
, puede verlos. Creo que hay una opción en la configuración.
Así, la famosa "cadena de prototipo" no se trata de la constructor
y/o prototype
propiedades, sino sobre el objeto prototipo de la que ese objeto hereda de:
function test() {} new test()
(a Function) (a test instance)
|| ||
|| ||
\/ \/
Function.prototype test.prototype
(a Function, by spec) (an Object)
|| ||
|| ||
\/ \/
Object.prototype Object.prototype
|| ||
|| ||
\/ \/
null null
Gracias por el enlace, ya me pregunté sobre la salida al comprobar rápidamente 'Object.getPrototypeOf (test)' en la consola ... – Bergi
Buena respuesta ... Muchas cosas para sacar de su respuesta :) –
@ Bergi- Por favor explique: "Un constructor es una función, por no decir una Función, y tiene ambas. Por lo tanto, hereda del objeto Function.prototype" – jason