Piénsalo así. MyConstructor
es un objeto de función, por lo que fue creado por Function
; por lo tanto, su [[Prototype]]
(o __proto__
) es idéntico a Function.prototype
.
De la misma manera, var myObj = new MyConstructor()
crea un objeto myObj
con un [[Prototype]]
idéntico a MyConstructor.prototype
.
Para decirlo de otra manera, las funciones tienen una propiedad prototype
, y cuando se invoca funciones con new
, van a construir un objeto que tiene una [[Prototype]]
idéntica a la propiedad de la función constructora prototype
... sin embargo la propiedad de una función prototype
no es Lo mismo que su propiedad [[Prototype]]
(o __proto__
), porque una función sigue las mismas reglas que otros objetos y obtiene su propiedad interna [[Prototype]]
de la función que la construyó (que es siempre Function
, por cierto).
Para explicar con más detalle, y [[Prototype]]
prototype
tienen propósitos completamente diferentes. [[Prototype]]
se usa cuando se resuelven las propiedades de un objeto. Si un objeto no tiene una propiedad, se comprueba su [[Prototype]]
, y luego ese objeto es [[Prototype]]
, y así sucesivamente, hasta que se encuentre una propiedad o llegue al final de la cadena del prototipo.
Por el contrario, prototype
es el mecanismo mediante el cual se asigna [[Prototype]]
propiedades de los objetos, ya que no puede acceder directamente a ellos sí que con la __proto__
propiedad no estándar.
Dado que las funciones son objetos, que tienen tanto una propiedad [[Prototype]]
interna, que se utiliza para resolver propiedades como con objetos normales, y una prototype
propiedad, que se asigna como el [[Prototype]]
de nuevos objetos construidos por la función.
Vea también: ['__proto__' contra' prototype' en JavaScript] (http://stackoverflow.com/q/9959727/1048572), [¿Cómo funciona JavaScript '.prototype'?] (Http: // stackoverflow.com/q/572897/1048572) y [¿En qué se diferencia '.__ proto__' de' .constructor.prototype'?] (http://stackoverflow.com/q/650764/1048572) – Bergi