Avant, j'étais un peu confus à propos de l'héritage du prototype et de la recherche d'identifiant dans la chaîne prototype de JavaScript.
Par exemple, le code suivant:
La copie de code est la suivante:
fonction foo () {};
var foo = new foo ();
Foo.prototype.label = "laruence";
alerte (foo.label); // Sortie: Laruence
alert (foo.label); //
Aujourd'hui, j'ai vu l'image suivante:
Disposition d'objets JavaScript
Voir également dans la hiérarchie d'objets JavaScript:
Le prototype n'est utilisé que pour les propriétés héritées par les objets / instances créés par cette fonction. La fonction elle-même n'utilise pas le prototype associé.
En d'autres termes, le prototype de l'objet fonction ne fonctionne pas dans le processus de recherche de la chaîne prototype.
Aujourd'hui, j'ai trouvé sous Firefox (parce que Firefox a exposé [[prototype]] via __proto__), celui qui participe vraiment à la recherche d'identifiant est le __proto__ de l'objet de fonction,
La copie de code est la suivante:
fonction foo () {};
var foo = new foo ();
Foo .__ proto __. Label = "laruence";
alerte (foo.label); // Sortie: Laruence
alert (foo.label); //
Et, évidemment:
La copie de code est la suivante:
fonction foo () {};
alert (foo .__ proto__ === foo.prototype); // sortie: faux
De plus, il a également expliqué,
La copie de code est la suivante:
alert (object.ForEach); // indéfini
Function.prototype.ForEach = fonction (objet, bloc, contexte) {
pour (clé var dans l'objet) {
if (typeof this.prototype [key] == "Undefined") {
Block.Call (contexte, objet [clé], clé, objet);
}
}
};
alert (object.ForEach);
alert (function.ForEach);
alert (object.ForEach === function.ForEach); // vrai