Maison  >  Article  >  interface Web  >  Un malentendu sur la chaîne de prototypes Javascript et les compétences prototype_javascript

Un malentendu sur la chaîne de prototypes Javascript et les compétences prototype_javascript

WBOY
WBOYoriginal
2016-05-16 16:33:041430parcourir

Avant, j'étais un peu confus au sujet de l'héritage prototypique et de la recherche d'identifiant dans la chaîne de prototypes Javascript,

Par exemple, le code suivant :

Copier le code Le code est le suivant :

fonction Foo() {};
var foo = nouveau Foo();
Foo.prototype.label = "laruence";
alert(foo.label); //sortie : laruence
alert(Foo.label);//sortie : non définie

J'ai vu la photo suivante aujourd'hui :

Mise en page des objets Javascript
Voir également dans la hiérarchie des objets Javascript :

Le prototype n'est utilisé que pour les propriétés héritées des 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 n'affecte pas le processus de recherche de chaîne de prototypes,

J'ai découvert aujourd'hui sous Firefox (car Firefox a exposé le [[prototype]] via __proto__), ce qui participe réellement à la recherche d'identifiant est le __proto__ de l'objet fonction,

Copier le code Le code est le suivant :

fonction Foo() {};
var foo = nouveau Foo();
Foo.__proto__.label = "laruence";
alert(Foo.label); //sortie : laruence
alert(foo.label);//sortie : non définie

Et, évidemment :

Copier le code Le code est le suivant :

fonction Foo() {};
alert(Foo.__proto__ === Foo.prototype); //sortie : false

De plus, il a également expliqué,

Copier le code Le code est le suivant :

alert(Object.forEach); // non défini

Function.prototype.forEach = function (objet, bloc, contexte) {
pour (clé var dans l'objet) {
Si (typeof this.prototype[key] == "undefined") {
               block.call(contexte, objet[clé], clé, objet);
>
>

};

alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach === Function.forEach); // true
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn