Antes, estaba un poco confundido sobre la herencia prototipo y la búsqueda de identificadores en la cadena prototipo de JavaScript.
Por ejemplo, el siguiente código:
La copia del código es la siguiente:
función foo () {};
var foo = new foo ();
Foo.prototype.label = "laruence";
alerta (foo.label); // Salida: Laruence
alerta (foo.label); // Salida: indefinido
Hoy vi la siguiente imagen:
Diseño del objeto JavaScript
Además, ver en la jerarquía de objetos de JavaScript:
El prototipo solo se usa para propiedades heredadas por objetos/instancias creadas por esa función. La función en sí no usa el prototipo asociado.
En otras palabras, el prototipo del objeto de función no funciona en el proceso de búsqueda de la cadena prototipo.
Hoy encontré con Firefox (porque Firefox expuso [[prototipo]] a través de __proto__), el que realmente participa en la búsqueda del identificador es el __proto__ del objeto de función,
La copia del código es la siguiente:
función foo () {};
var foo = new foo ();
Foo .__ Proto __. Label = "Laruence";
alerta (foo.label); // Salida: Laruence
alerta (foo.label); // Salida: indefinido
Y obviamente:
La copia del código es la siguiente:
función foo () {};
alerta (foo .__ proto__ === foo.prototype); // Salida: Falso
Además, también explicó,
La copia del código es la siguiente:
alerta (object.foreach); // indefinido
Function.prototype.forEach = function (objeto, bloque, context) {
for (clave var en objeto) {
if (typeof this.prototype [key] == "Undefined") {
block.call (contexto, objeto [clave], clave, objeto);
}
}
};
alerta (object.foreach);
alerta (function.ForEach);
alerta (objeto.ForEach === Function.ForEach); // verdadero