Antes, fiquei um pouco confuso sobre a herança do protótipo e a pesquisa de identificador na cadeia de protótipos de JavaScript.
Por exemplo, o seguinte código:
A cópia do código é a seguinte:
function foo () {};
var foo = new Foo ();
Foo.prototype.label = "laruence";
alerta (foo.label); // Saída: Laruence
alerta (foo.label); // saída: indefinido
Hoje eu vi a seguinte foto:
Layout do objeto JavaScript
Além disso, veja na hierarquia de objetos JavaScript:
O protótipo é usado apenas para propriedades herdadas por objetos/instâncias criadas por essa função. A função em si não usa o protótipo associado.
Em outras palavras, o protótipo do objeto de função não funciona no processo de pesquisa na cadeia do protótipo.
Hoje eu encontrei no Firefox (porque o Firefox exposto [[protótipo]] por __proto__), aquele que realmente participa da pesquisa de identificador é o __proto__ do objeto de função,
A cópia do código é a seguinte:
function foo () {};
var foo = new Foo ();
Foo .__ Proto __. Label = "Laruence";
alerta (foo.label); // Saída: Laruence
alerta (foo.label); // saída: indefinido
E, obviamente:
A cópia do código é a seguinte:
function foo () {};
alerta (foo .__ proto__ === foo.prototype); // saída: false
Além disso, também explicou,
A cópia do código é a seguinte:
alerta (object.foreach); // indefinido
Function.prototype.foreach = function (objeto, bloco, contexto) {
para (tecla var no objeto) {
if (typeof this.prototype [key] == "indefinido") {
block.call (contexto, objeto [chave], chave, objeto);
}
}
};
alerta (object.foreach);
alerta (function.foreach);
alert (object.ForEach === function.ForEach); // verdadeiro