Une brève description du modèle de constructeur (voir photo) :
Le constructeur ne peut pas être hérité, donc le remplacement ne peut pas être remplacé, mais la surcharge peut être remplacée. Les constructeurs sont utilisés pour créer des objets d'un type spécifique - préparer l'objet à utiliser et recevoir des paramètres que le constructeur peut utiliser pour définir les valeurs des propriétés et des méthodes des membres lors de la première création de l'objet
1. Créer un objet
Deux façons de créer de nouveaux objets
var newObject={}; var newObject=new object();//object 构造器的简洁记法
2. Constructeur de base
Si Javascript ne prend pas en charge les classes, les objets et les constructeurs peuvent être utilisés pour instancier un objet via le nouveau mot-clé. Le code est probablement comme ceci
.function Car(model,year,miles){ this.model=model; this.year=year; this.miles=miles; this.toString=function() { return this.model+"has done"+this.miles+"miles"; }; }; //用法 //可以创建car新实例 var civic=new Car("Hona Civic",2009,2000); var mondeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
3. Constructeur avec prototype
JavaScript a l'attribut prototype. Après avoir appelé le constructeur JavaScript pour créer un objet, le nouvel objet aura toutes les propriétés du prototype du constructeur. De cette façon, plusieurs objets Car peuvent être créés (en accédant au même prototype)
funcion() Ca(model,year,miles){ this.model=model; this.year=year; this.miles=miles; //注意使用Object.prototype.newMethod 而不是Object.prototype是为了重新定义prototype对象 Car.prototype.toString=function(){ return this.model+"Has done" +this.miles+"miles"; }; }; //用法 var civic=new Car("Honda Civic",2009,20000); var momdeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
Maintenant, une seule instance de toString() peut être partagée entre tous les objets Car
Permettez-moi de partager avec vous les erreurs courantes du constructeur dans les projets réels
class A { public int Avar; public A() { System.out.println("AAA"); doSomething(); } public void doSomething() { Avar = 1111; System.out.println("A.doSomething()"); } } public class B extends A { public int Bvar = 2222; public B() { System.out.println("BBB"); doSomething(); System.out.println("Avar=" + Avar); } public void doSomething() { System.out.println("Bvar=" + Bvar); } public static void main(String[] args) { new B(); } }
L'ordre est comme ceci, d'abord pour générer B, vous devez d'abord générer A, donc appelez le constructeur de A, sortez AAA, puis appelez la méthode dosomething Remarque : cette méthode de A est écrasée par B, et. ce que vous générez est l'objet de B. , donc il appelle la méthode de B. Puisque BVAR n'a actuellement aucune valeur donnée, il est automatiquement initialisé à 0
;Générez ensuite l'objet B, initialisez d'abord la variable BVAR, puis appelez le constructeur pour sortir BBB, puis appelez la méthode A ce moment, BVAR a été initialisé, donc la sortie BVAR = 2222, et la variable AVAR dans. l'objet A n'appelle pas la méthode faire quelque chose de l'objet A. , donc sa valeur est 0, puis affiche 0
Le résultat complet est le suivant :
AAA
Bvar=0
BBB
Bvar=2222
Avar=0
Remarque : dans l'ordre d'initialisation, lors de l'héritage, l'objet superclasse est généré en premier. Lorsqu'un objet est généré, les variables statiques sont générées en premier, puis les variables générales, puis le constructeur est appelé ! Lorsque tous les objets de superclasse sont générés, cet objet est généré dans le même ordre ! Lorsqu'une méthode est surchargée, la méthode de l'objet actuel est appelée ! Cela doit être noté.