생성자 패턴에 대한 간략한 설명(그림 참조):
생성자는 상속될 수 없으므로 Overriding은 재정의할 수 없지만 Overloading은 재정의할 수 있습니다. 생성자는 특정 유형의 객체를 생성하는 데 사용됩니다. 사용할 객체를 준비하고 객체가 처음 생성될 때 생성자가 멤버 속성 및 메서드의 값을 설정하는 데 사용할 수 있는 매개 변수를 받습니다
1. 객체 생성
새 개체를 만드는 두 가지 방법
1 2 | var newObject={};
var newObject= new object();
|
로그인 후 복사
2. 기본 생성자
Javascript가 클래스를 지원하지 않는 경우 객체와 생성자를 사용하여 new 키워드를 통해 객체를 인스턴스화할 수 있습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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" ;
};
};
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. 프로토타입이 있는 생성자
JavaScript에는 프로토타입 속성이 있습니다. JavaScript 생성자를 호출하여 객체를 생성한 후 새 객체는 생성자 프로토타입의 모든 속성을 갖게 됩니다. 이러한 방식으로 여러 Car 객체를 생성할 수 있습니다(동일한 프로토타입에 액세스)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | funcion() Ca(model,year,miles){
this .model=model;
this .year=year;
this .miles=miles;
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());
|
로그인 후 복사
이제 toString()의 단일 인스턴스를 모든 Car 객체에서 공유할 수 있습니다
실제 프로젝트에서 생성자가 흔히 저지르는 실수를 알려드리겠습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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();
}
}
|
로그인 후 복사
순서는 이렇습니다. 먼저 B를 생성하려면 A를 먼저 생성해야 하므로 A의 생성자를 호출하고 AAA를 출력한 다음 dosomething 메서드를 호출합니다. 참고: A의 이 메서드는 B로 덮어쓰여집니다. 생성하는 것은 B. 의 객체이므로 B의 메서드를 호출합니다. 현재 BVAR에는 지정된 값이 없으므로 자동으로 0으로 초기화됩니다.
그런 다음 B 객체를 생성하고 먼저 변수 BVAR을 초기화한 다음 생성자를 호출하여 BBB를 출력한 다음 메서드를 호출합니다. 이때 BVAR이 초기화되었으므로 출력 BVAR = 2222이고 변수 AVAR은 객체 A는 객체 A의 dosomething 메서드를 호출하지 않으므로 해당 값은 0이고 0을 출력합니다
전체 출력은 다음과 같습니다.
아아
브바르=0
BB
브바르=2222
아바르=0
참고: 초기화 순서에 따라 상속 시 슈퍼클래스 객체가 먼저 생성됩니다. 객체가 생성되면 정적 변수가 먼저 생성되고 일반 변수가 생성된 다음 생성자가 호출됩니다! 모든 슈퍼클래스 객체가 생성되면 이 객체도 같은 순서로 생성됩니다! 메서드가 재정의되면 현재 개체의 메서드가 호출됩니다! 이것은 주목할 필요가 있습니다.