Pour déterminer la chaîne prototype, vous devez d'abord comprendre le type de fonction. Une classe a une fonctionnalité très importante, à savoir qu'elle peut créer des objets avec lui comme modèle basé sur son constructeur. En JavaScript, la fonction a 2 fonctions
Tout d'abord, en tant qu'appel de fonction générale
Deuxièmement, le constructeur de son objet prototype est nouveau ()
Prenons un exemple
La copie de code est la suivante:
fonction a () {
this.name = 'a';
}
Que se passe-t-il lorsqu'une fonction est créée?
Premièrement, il créera un objet de fonction, c'est-à-dire un lui-même
Deuxièmement, il créera un objet prototype @A (indiqué par @)
Troisièmement, l'objet fonction aura un pointeur prototype, qui pointe vers l'objet prototype correspondant, et ici il pointe vers @A
Quatrièmement, il y a un pointeur de constructeur dans l'objet @A, pointant vers son constructeur, il pointe ici
http://img.blog.csdn.net/20140222125611500?watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqvbgpsmtu3mdex/font/5a6l5l2t/fontsize/400/fil / Sud-Est
À quoi sert cet attribut prototype?
En fait, l'attribut prototype représente la plage que la fonction actuelle peut contrôler (ou il indique dont la fonction actuelle est le constructeur). .
La copie de code est la suivante:
fonction a () {
this.name = 'a';
}
var a1 = new a ();
Ceci est similaire à d'autres langues communes.
Modification des propriétés du prototype pointant vers l'objet affectera toutes les instances créées avec elle comme modèle.
La copie de code est la suivante:
fonction a () {
this.name = 'a';
}
var a1 = new a ();
a.prototype.age = 1;
alerte (a1.age);
Résultats: 1
Alors pourquoi l'objet A1 peut-il accéder directement à l'attribut d'âge? Je ne définis pas l'attribut d'âge dans l'objet A1.
En effet, il y aura une référence dans tous les cas _proto_ (peut être accessible directement sous Firfox, Chrome, mais IE ne le prend pas en charge) pointant vers ce prototype, il pointe ici @a,
La copie de code est la suivante:
fonction a () {
this.name = 'a';
}
var a1 = new a ();
alert (a1._proto_ == a.prototype)
Résultat: vrai
Lorsque vous accédez aux attributs, vous recherchez d'abord l'objet A1. t le trouver, vous retournerez indéfiniment.
À ce stade, la signification de la chaîne prototype sort. Object.prototype est le prototype de niveau supérieur, donc si la propriété Object.Prototype est modifiée, elle affectera tous les objets.
En regardant un morceau de code
La copie de code est la suivante:
fonction a () {
this.name = 'a';
}
fonction b () {
this.age = 1;
}
B.Prototype = new A ();
alert (new B (). Nom);
Nous montrons que B pointe le prototype de B vers une instance de A, puis l'instance de B peut également accéder aux propriétés de A. C'est l'héritage de JavaScript, alors pourquoi B.Protype pointe-t-il vers une instance de A, plutôt que de pointer directement vers A.Protype?
La copie de code est la suivante:
B.Prototype = nouveau A.Prototype;
Si vous modifiez les propriétés dans p.prototype comme écrit ci-dessus, le prototype de A changera également, ce qui est équivalent à la sous-classe modifiant la classe parent, et les propriétés de la sous-classe et de la classe parent sont combinées, ce qui est évidemment inapproprié. En d'autres termes, B devient également le constructeur de @A, et A et B deviennent des relations parallèles.
Nous pouvons le définir ensuite:
La fonction a hérité de la fonction B, qui est le constructeur qui fait de la fonction une instance du prototype de fonction b.
La copie de code est la suivante:
var $ = jQuery = fonction (sélecteur, contexte) {
// Il est impossible de se construire à nouveau dans votre propre constructeur, donc une autre instance de constructeur a été retournée
retourner un nouvel init (sélecteur, contexte);
}
jQuery.fn = jQuery.prototype = {
Taille: fonction () {
retourne this.length;
}
}
fonction init (sélecteur, contexte) {
}
init.prototype = jQuery.fn ;;
}
Il s'agit d'un code source de jQuery.
En utilisant les connaissances ci-dessus, on peut expliquer que jQuery n'est qu'un appel à une fonction générale, qui renvoie un objet créé par un autre constructeur du prototype jQuery, c'est-à-dire new init ()