Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation de l'attribut Prototype de js

Explication détaillée de l'utilisation de l'attribut Prototype de js

小云云
小云云original
2018-03-07 13:03:491673parcourir

Chaque constructeur possède un attribut appelé prototype (prototype, qui ne sera pas traduit ci-dessous, utiliser son texte original). Cet attribut est très utile pour 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 un attribut de prototype, car il existe dans chaque constructeur. Vous pouvez jeter un œil à l'exemple suivant :

Exemple PT1

CODE :

function Test()
{
}
alert(Test.prototype); // 输出 “Object"

Ajouter des attributs au prototype

Tout comme vous êtes Comme vous pouvez le voir ci-dessus, le prototype est un objet, vous pouvez donc lui ajouter des propriétés. Les propriétés que vous ajoutez au prototype deviendront des propriétés communes aux objets créés à l'aide de ce constructeur.

Par exemple, j'ai un type de données Fish ci-dessous, et je veux que tous les poissons aient ces attributs : livesIn="water" et price=20 ; pour y parvenir, je peux ajouter au prototype de le constructeur Fish ces attributs.

Exemple PT2

CODE :

function Fish(name, color)
{
this.name=name;
this.color=color;
}
Fish.prototype.livesIn="water";
Fish.prototype.price=20;

Ensuite, préparons du poisson :

CODE :

var fish1=new Fish("mackarel", "gray");
var fish2=new Fish("goldfish", "orange");
var fish3=new Fish("salmon", “white");

Jetons un coup d'œil aux attributs du poisson :

CODE :

for (int i=1; i<=3; i++)
{
var fish=eval_r("fish"+i);   // 我只是取得指向这条鱼的指针
alert(fish.name+","+fish.color+","+fish.livesIn+","+fish.price);
}

La sortie devrait être :

CODE :

"mackarel, gray, water, 20"
"goldfish, orange, water, 20"
"salmon, white water, 20”

Vous voyez que tous les poissons ont des propriétés de vie et de prix, et nous ne déclarons même pas ces propriétés spécifiquement pour chaque poisson différent. En effet, lorsqu'un objet est créé, ce constructeur attribuera son prototype d'attribut à l'attribut interne __proto__ du nouvel objet. Ce __proto__ est utilisé par cet objet pour trouver ses propriétés.

Vous pouvez également ajouter des fonctions communes à tous les objets via un prototype. Cela présente l'avantage que vous n'avez pas besoin de créer et d'initialiser cette fonction à chaque fois que vous construisez un objet. Pour expliquer cela, revisitons l'exemple DT9 et réécrivons-le à l'aide du prototype :


Ajouter des fonctions aux objets à l'aide du prototype

Exemple PT3

CODE :

function Employee(name, salary)
{
this.name=name;              
this.salary=salary;
}
Employee.prototype.getSalary=function getSalaryFunction()
{
return this.salary;
}
Employee.prototype.addSalary=function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}

On peut créer l'objet comme d'habitude :

CODE :

var boss1=new Employee("Joan", 200000);
var boss2=new Employee("Kim", 100000);
var boss3=new Employee("Sam", 150000);

et le valider :

CODE :

alert(boss1.getSalary());   // 输出 200000
alert(boss2.getSalary());   // 输出 100000
alert(boss3.getSalary());   // 输出 150000

Voici un schéma pour illustrer le fonctionnement du prototype. Chaque instance de cet objet (boss1, boss2, boss3) possède une propriété interne appelée __proto__, qui pointe vers la propriété prototype de son constructeur (Employee). Lorsque vous exécutez getSalary ou addSalary, cet objet trouvera et exécutera ce code dans son __proto__. Notez ceci : il n'y a pas de duplication de code ici (comparez cela au diagramme de l'exemple DT8).


Recommandations associées :

Exemple détaillé de prototype.js pour implémenter simplement la fonction ajax

Explication détaillée de l'utilisation du prototype en JavaScript

Une étude de cas sur la façon d'utiliser le prototype pour implémenter un tableau personnalisé en Js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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