Fonction: prototype
Chaque constructeur a une propriété appelée prototype (prototype, non plus traduit ci-dessous, utilise son texte d'origine). Cette propriété est très utile: déclarer des variables ou des fonctions communes pour une classe spécifique.
Définition du prototype
Vous n'avez pas besoin de déclarer explicitement une propriété prototype, car elle existe dans chaque constructeur. Vous pouvez jeter un œil à l'exemple suivant:
Exemple PT1
La copie de code est la suivante:
Test de fonction ()
{
}
alert (test.prototype); // sortie "objet"
Ajouter des propriétés au prototype
Comme vous pouvez le voir ci-dessus, le prototype est un objet, vous pouvez donc y ajouter des propriétés. L'attribut que vous ajoutez au prototype deviendra un attribut commun pour l'objet créé à l'aide de ce constructeur.
Par exemple, j'ai un poisson de type de données ci-dessous, et je veux que tous les poissons aient ces propriétés: LivesIn = "Water" et Price = 20; Pour y parvenir, je peux ajouter ces propriétés au prototype du poisson constructeur.
Exemple PT2
La copie de code est la suivante:
Fish Fish (nom, couleur)
{
this.name = name;
this.color = couleur;
}
Fish.prototype.livesIn = "Water";
Fish.prototype.price = 20;
Faisons ensuite quelques poissons:
La copie de code est la suivante:
var poisson1 = nouveau poisson ("mackarel", "gris");
var poisson2 = nouveau poisson ("poisson rouge", "orange");
var poisson3 = nouveau poisson ("saumon", "blanc");
Jetons un coup d'œil aux propriétés du poisson:
La copie de code est la suivante:
pour (int i = 1; i <= 3; i ++)
{
var fish = eval_r ("poisson" + i); // Je viens juste du pointeur de ce poisson
alerte (fish.name + "," + fish.color + "," + fish.livesin + "," + fish.price);
}
La sortie doit être:
La copie de code est la suivante:
"Mackarel, gris, eau, 20"
"Fish-or, orange, eau, 20"
"Saumon, eau blanche, 20"
Vous voyez que tous les poissons ont des attributs Livesin et Price, et nous ne déclarons même pas spécifiquement ces attributs pour chaque poisson différent. À l'heure actuelle, lorsqu'un objet est créé, le constructeur affectera son prototype d'attribut à l'attribut interne du nouvel objet __proto__. Ce __proto__ est utilisé par cet objet pour trouver ses propriétés.
Vous pouvez également utiliser le prototype pour ajouter des fonctions communes à tous les objets. Cela a un avantage: vous n'avez pas besoin de créer et d'initialiser cette fonction à chaque fois que vous construisez un objet. Pour expliquer cela, regardons à nouveau l'exemple DT9 et réécrivez-le à l'aide du prototype:
Utiliser le prototype pour ajouter des fonctions aux objets
Exemple PT3
La copie de code est la suivante:
Employé de fonction (nom, salaire)
{
this.name = name;
this.salary = salaire;
}
Employee.prototype.getsalary = fonction getAlaryFunction ()
{
Renvoyez ce.Salaire;
}
Employee.prototype.addsalary = fonction addSalaryFunction (ajout)
{
this.salary = this.salary + ajout;
}
Nous pouvons créer des objets comme nous le faisons normalement:
La copie de code est la suivante:
var boss1 = nouvel employé ("Joan", 200000);
var boss2 = nouvel employé ("kim", 100000);
var boss3 = nouvel employé ("sam", 150000);
Et le vérifier:
La copie de code est la suivante:
alert (boss1.getsalary ()); // Sortie 200000
alert (boss2.getSalary ()); // Sortie 100000
alert (boss3.getSalary ()); // Sortie 150000
Voici un diagramme pour illustrer le fonctionnement du prototype. Chaque instance de cet objet (boss1, boss2, boss3) a une propriété interne appelée __proto__, qui pointe le prototype de propriété de son constructeur (employé). Lorsque vous exécutez getSalary ou AddSalary, cet objet trouvera et exécutera ce code dans son __proto__. Remarquez ceci: il n'y a pas de copie du code ici (comparez-la avec l'exemple du graphique DT8).