> 웹 프론트엔드 > JS 튜토리얼 > JavaScript_javascript 기술의 생성자 패턴에 대한 자세한 설명

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

WBOY
풀어 주다: 2016-05-16 15:19:54
원래의
1369명이 탐색했습니다.

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

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

1. 객체 생성

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

1

2

var newObject={};

var newObject=new object();//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";

};

};

//用法

//可以创建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 객체를 생성할 수 있습니다(동일한 프로토타입에 액세스)

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;

//注意使用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 객체에서 공유할 수 있습니다

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

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

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿