Maison >interface Web >js tutoriel >Explication détaillée de la façon dont les classes sont définies en javascript (quatre façons)_compétences javascript

Explication détaillée de la façon dont les classes sont définies en javascript (quatre façons)_compétences javascript

WBOY
WBOYoriginal
2016-05-16 15:24:211441parcourir

Les exemples de cet article décrivent comment définir des classes en JavaScript. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

La définition de classe comprend quatre manières :

1. Méthode d'usine

function createCar(name,color,price){
  var tempcar=new Object;
  tempcar.name=name;
  tempcar.color=color;
  tempcar.price=price;
  tempcar.getName=function(){
   document.write(this.name+"-----"+this.color+"<br>");
  };
  return tempcar;
}
var car1=new createCar("工厂桑塔纳","red","121313");
car1.getName();

Définit une fonction d'usine qui peut créer et renvoyer des objets d'un type spécifique. Cela a l'air bien, mais il y a un petit problème,

.

Une nouvelle fonction showColor doit être créée à chaque fois qu'elle est appelée, on peut la déplacer en dehors de la fonction,

function getName(){
  document.write(this.name+"-----"+this.color+"<br>");
}

Pointez-le directement dans la fonction usine

Copier le code Le code est le suivant :
tempCar.getName = getName;

Cela évite le problème de la création répétée de fonctions, mais cela ne ressemble pas à une méthode objet.

2. Méthode constructeur

function Car(name,color,price){
  this.name=name;
  this.color=color;
  this.price=price;
  this.getColor=function(){
   document.write(this.name+"-----"+this.color+"<br>");
  };
}
var car2=new Car("构造桑塔纳","red","121313");
car2.getColor(); 

Vous pouvez voir la différence avec la première méthode. Il n'y a aucun objet créé à l'intérieur du constructeur, mais le mot-clé this est utilisé.

Lors de l'utilisation de new pour appeler le constructeur, un objet est d'abord créé puis accessible à l'aide de this.

Cet usage est très similaire à d'autres langages orientés objet, mais cette méthode a le même problème que la précédente, qui est de créer des fonctions à plusieurs reprises.

3. Méthode prototype

function proCar(){
}
proCar.prototype.name="原型";
proCar.prototype.color="blue";
proCar.prototype.price="10000";
proCar.prototype.getName=function(){
  document.write(this.name+"-----"+this.color+"<br>");
};
var car3=new proCar();
car3.getName();

Le constructeur Car est d'abord défini sans aucun code, puis les propriétés sont ajoutées via un prototype. Avantages :

a. Toutes les instances stockent des pointeurs vers showColor, ce qui résout le problème de la création répétée de fonctions

b. Vous pouvez utiliser instanceof pour vérifier le type d'objet

Copier le code Le code est le suivant :
alert(car3 instanceof proCar);//true

Inconvénients, ajoutez le code suivant :

proCar.prototype.drivers = newArray("mike", "sue");
car3.drivers.push("matt");
alert(car3.drivers);//outputs "mike,sue,matt"
alert(car3.drivers);//outputs "mike,sue,matt"

les pilotes sont des pointeurs vers des objets Array, et les deux instances de proCar pointent vers le même tableau.

4. Méthode de prototype dynamique

function autoProCar(name,color,price){
  this.name=name;
  this.color=color;
  this.price=price;
  this.drives=new Array("mike","sue");
  if(typeof autoProCar.initialized== "undefined"){
   autoProCar.prototype.getName =function(){
   document.write(this.name+"-----"+this.color+"<br>");
   };
   autoProCar.initialized=true;
  }
}
var car4=new autoProCar("动态原型","yellow","1234565");
car4.getName();
car4.drives.push("newOne");
document.write(car4.drives);

Cette méthode est ma préférée. Toutes les définitions de classe sont complétées dans une fonction. Cela ressemble beaucoup aux définitions de classe dans d'autres langages qui ne seront pas créées à plusieurs reprises.

J'espère que cet article sera utile à tout le monde dans la programmation JavaScript.

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