Sé que la propiedad prototype
de los objetos de función de JavaScript se copia en la propiedad interna [[Prototype]]
(a.k.a. __proto__
) de los objetos instanciados mediante la función como constructor. Por lo tanto, puedo establecer esta propiedad a cualquier objeto que quiero actuar como el prototipo:¿Cuál es el valor inicial de la propiedad del prototipo de una función de JavaScript?
function Foo() {}
Foo.prototype = {
toString: function() { return "I'm a Foo!"; }
}
new Foo().toString()
// --> "I'm a Foo!"
Parece que es una práctica generalizada para agregar funciones que deben actuar como métodos de la clase a la prototipo del recién existentes funciones generadas como este:
function Bar() {}
Bar.prototype.toString = function() {
return "I'm a Bar!";
}
new Bar().toString()
// --> "I'm a Bar!"
No está claro para mí, sin embargo, lo que el valor inicial de la propiedad es prototype
.
function Baz() {}
Baz.prototype
// --> Baz {
// constructor: function Baz() {},
// __proto__: Object
// }
El comentario muestra qué se imprime la consola de JavaScript de Chrome. ¿Esto significa que cada función que creo realmente crea dos objetos? Uno para la función en sí (el constructor
) y otro para su prototipo.
¿Está esto definido en alguna parte del estándar ECMAScript? Traté de encontrarlo pero no pude. ¿Todos los navegadores manejan esto de la misma manera?
Gracias. Esa fue exactamente la respuesta que estaba buscando. – MForster
¡OMG! Me sumerjo en la especificación ECMAScript de vez en cuando, pero esto es difícil de leer. ¿Conoces un recurso que explica todo en él paso a paso (o al menos explicando esas partes horribles)? –
Tristemente no. Es una pena que no haya una buena referencia para ECMAScript como un lenguaje en inglés real, especialmente porque muchas de sus características son ... ser generoso ... un poco peculiar. Tenemos las guías específicas de proveedores como MDC, MSDN y Adobe, tenemos la especificación ECMA casi inutilizable (de alguna manera te acostumbras al lenguaje anterior, pero todavía es muy pesado en el mejor de los casos)), y aparte de eso, está la cuneta de sitios de tutoriales aleatorios que están llenos de errores y consejos terribles. Y esto, para uno de los idiomas más utilizados en el mundo. Es inútil – bobince