>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술의 생성자 패턴에 대한 자세한 설명

JavaScript_javascript 기술의 생성자 패턴에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 15:19:541336검색

생성자 패턴에 대한 간략한 설명(그림 참조):

생성자는 상속될 수 없으므로 Overriding은 재정의할 수 없지만 Overloading은 재정의할 수 있습니다. 생성자는 특정 유형의 객체를 생성하는 데 사용됩니다. 사용할 객체를 준비하고 객체가 처음 생성될 때 생성자가 멤버 속성 및 메서드의 값을 설정하는 데 사용할 수 있는 매개 변수를 받습니다

1. 객체 생성

새 개체를 만드는 두 가지 방법

var newObject={};
var newObject=new object();//object 构造器的简洁记法

2. 기본 생성자

Javascript가 클래스를 지원하지 않는 경우 객체와 생성자를 사용하여 new 키워드를 통해 객체를 인스턴스화할 수 있습니다

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. 프로토타입이 있는 생성자

JavaScript에는 프로토타입 속성이 있습니다. JavaScript 생성자를 호출하여 객체를 생성한 후 새 객체는 생성자 프로토타입의 모든 속성을 갖게 됩니다. 이러한 방식으로 여러 Car 객체를 생성할 수 있습니다(동일한 프로토타입에 액세스)

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());

이제 toString()의 단일 인스턴스를 모든 Car 객체에서 공유할 수 있습니다

실제 프로젝트에서 생성자가 흔히 저지르는 실수를 알려드리겠습니다

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

참고: 초기화 순서에 따라 상속 시 슈퍼클래스 객체가 먼저 생성됩니다. 객체가 생성되면 정적 변수가 먼저 생성되고 일반 변수가 생성된 다음 생성자가 호출됩니다! 모든 슈퍼클래스 객체가 생성되면 이 객체도 같은 순서로 생성됩니다! 메서드가 재정의되면 현재 개체의 메서드가 호출됩니다! 이것은 주목할 필요가 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.