Recommandations associées : Tutoriel JavaScript
(Concept) La chaîne de prototypes fait référence à une liste chaînée composée de certains prototypes via des pointeurs __proto__ Une chaîne de prototypes peut servir des objets qui souhaitent partager des données dans la chaîne de prototypes et est utilisée. pour implémenter le mécanisme d'héritage JavaScript.
(Pointeur de chaîne de prototype) Pointeurs impliqués dans la chaîne de prototypes :
fonction A() { } soit a1 = nouveau A() soit a2 = nouveau A() soit a3 = nouveau A() // Ces lignes de code généreront la chaîne de prototypes présentée ci-dessous
soit A = { test: "" } soit a1 = Objet.create(A) soit a2 = Objet.create(A) soit a3 = Objet.create(A) // Ces lignes de code correspondent à la chaîne prototype présentée ci-dessous
fonction A() { } soit a1 = nouveau A() soit a2 = nouveau A() soit a3 = nouveau A() // Ces lignes de code généreront la chaîne de prototypes présentée ci-dessous
La chaîne prototype impliquant l'héritage peut être analysée à l'aide d'un schéma simplifié
// Utiliser le mode combinaison parasite pour implémenter la fonction héritée C() {} fonction B() {} B.prototype = nouveau C() fonction A() {} A.prototype = nouveau B() soit a1 = nouveau A() soit a2 = nouveau A() soit a3 = nouveau A()
de la chaîne prototype Le point final de la chaîne prototype est nul et ne fait pas référence à un objet prototype
La dynamique du prototype est expliquée en détail dans "Programmation orientée objet", et cela implique principalement la réécriture et la modification du prototype. Voici quelques exemples.
Exemple 1 : Prototype Dynamics
var A = function() {} ; A.prototype.n = 1 ; var b = nouveau A(); A. prototype = { n: 2, m: 3 } var c = nouveau A(); console.log(bn); // 1 console.log(bm); // non défini console.log(cn); // 2 console.log(cm); // 3
Exemple 2 - Dynamique du prototype et de la chaîne inférieure de la chaîne de prototypes
var F = function() {}; Objet.prototype.a = fonction() { console.log('a'); } ; Fonction.prototype.b = fonction() { console.log('b'); } var f = nouveau F(); fa(); // un fb(); // L'attribut b n'existe pas Fa(); // a Fb(); //
bReportez-vous à la première image du « Diagramme de chaîne prototype n'impliquant pas d'héritage » mentionné ci-dessus, vous pouvez dessiner le problème d'analyse de diagramme de référence simplifié suivant.
Exemple 3 : Dynamique du prototype et
fonction de chaîne inférieure de la chaîne prototype Personne (nom) { ce.nom = nom } let p = new Person('Tom'); console.log(p.__proto__) // Personne.prototype console.log(Person.__proto__) // Function.prototype
Exemple 4 — Dynamique du prototype et chaîne inférieure de la chaîne du prototype
var foo = {}, F = function(){}; Objet.prototype.a = 'valeur a'; Function.prototype.b = 'valeur b'; Objet.prototype = { a : "valeur a » } Fonction.prototype = { b : "valeur b" } console.log(foo.a); // valeur a console.log(foo.b); // non défini console.log(Fa); // valeur a console.log(Fb); // la valeur b
fait référence à la première image du « Diagramme de chaîne prototype n'impliquant pas d'héritage » mentionné ci-dessus pour dessiner le problème d'analyse de diagramme de référence simplifié suivant. Puisque foo et F lient leurs prototypes lorsqu'ils sont déclarés, ils obtiennent l'adresse du prototype stocké dans la mémoire tas via le pointeur stocké dans la mémoire pile. Tout d'abord, le prototype est modifié. L'opération de modification modifiera le prototype sur la mémoire tas foo et F pourra toujours accéder au résultat modifié via le pointeur de la mémoire pile. La deuxième étape consiste à réécrire le prototype. JS est constitué de toutes les "opérations de transfert de valeur". Après avoir réécrit le prototype, ouvrez d'abord un nouvel espace dans la mémoire tas pour stocker le nouveau prototype, puis ouvrez un nouvel espace dans la mémoire de la pile. pour stocker le pointeur vers la mémoire du tas. À l'heure actuelle, comme les pointeurs de mémoire de pile détenus par foo et F sont différents des nouveaux pointeurs de mémoire de pile, foo et F ne peuvent pas accéder au prototype réécrit.
Recommandations associées : Tutoriel d'apprentissage JavaScript
Ce qui précède est une explication détaillée de la chaîne de prototypes JavaScript avec des images et des textes. Pour plus d'informations, veuillez prêter attention aux autres articles connexes sur le site Web PHP chinois !