생성자 상속을 빌리십시오
프로토 타입에 참조 유형 값을 포함시키는 문제를 해결하기 위해 개발자는 Borrous Constructor Stealing (때로는 위조 된 물체 또는 고전 상속)이라는 기술을 사용하기 시작했습니다. 이 기술의 기본 아이디어는 매우 간단합니다. 즉, 하위 유형 생성자 내부의 SuperType 생성자를 호출합니다.
기본 모드
함수 superType () {this.colors = [ "빨간색", "blue", "green"];} 함수 subtype () {// 상속 된 superType suptype.call (this);} var instance1 = new subtype (); instance1.colors.push ( "black"); instans1.colors); // "빨간색, 파란색, 녹색, 검은 색"var instance2 = new subtype (); alert (instance2.colors); // "빨간색, 파란색, 녹색"기본 아이디어
빌린 생성자의 기본 아이디어는 호출을 사용하거나 적용하는 것이 서브 클래스에 의해 생성 된 인스턴스에 부모 클래스에 지정된 속성 및 메소드를 복사 (차입)하는 것입니다. 이 객체는 함수의 실행 환경에 따라 런타임에 바인딩되기 때문입니다. 즉, 전 세계적으로 이것은 창과 같으며 함수를 객체의 방법으로 호출 할 때 해당 객체와 같습니다. 호출 및 적용 방법을 사용하여 다른 객체 대신 메소드를 호출 할 수 있습니다. 호출 및 적용 메소드는 기능의 객체 컨텍스트를 초기 컨텍스트에서 thisobj가 지정한 새 개체로 변경할 수 있습니다.
따라서이 차입 생성자는 새 개체가 호출 될 때 (새 연산자가 직접 통화와 다릅니다. 함수가 호출되면이 기능이 창을 가리 킵니다. 새 인스턴스가 생성되면 새 인스턴스 객체가 생성되고 하위 유형의 코드가 실행됩니다. 하위 유형의 호출은 SuperTyep을 호출합니다. 즉,이 포인팅이 새 인스턴스를 가리키는 것으로 변경되므로 SuperType 의이 관련 속성 및 메소드는 SUPTYPE에 할당하지 않고 새 인스턴스에 할당됩니다. 모든 인스턴스에는 이러한 속성과이를 부모 클래스에 의해 정의하는 속성과 방법이 있습니다.
장점
프로토 타입 체인과 비교할 때 빌린 생성자는 큰 이점이 있습니다. 즉, 하위 유형 생성자의 슈퍼 타입 생성자에게 매개 변수를 전달할 수 있습니다. 속성이 이것에 바인딩되므로 호출 될 때 해당 인스턴스에 할당되며 각 인스턴스의 값은 서로 영향을 미치지 않습니다.
예를 들어:
함수 superType (name) {this.name = name;} 함수 subtype () {// superType를 상속하고, 또한 superType.call (this, "nicholas"); // 인스턴스 속성 this.age = 29; //"nicholas";alert(instance.age); // 29단점
생성자를 빌리면 생성자 패턴의 문제를 피하지 않습니다. 방법은 모두 생성자에 정의되므로 기능 재사용에 대해 이야기 할 방법이 없습니다. 또한, 슈퍼 유형 프로토 타입에 정의 된 방법은 또한 하위 유형에 보이지 않으며, 결과적으로 모든 유형은 생성자 패턴 만 사용할 수 있습니다. 이러한 문제를 감안할 때, 빌린 생성자 기술도 거의 사용되지 않습니다.
조합 상속
의사-고전 상속이라고도하는 조합 상속. 프로토 타입 체인과 빌린 생성자 기술을 한 조각으로 결합하여 두 가지의 강점을 연주하는 상속 모델입니다.
기본 아이디어
아이디어는 프로토 타입 체인을 사용하여 프로토 타입 특성 및 방법의 상속을 구현하고 생성자를 빌려서 인스턴스 특성의 상속을 구현하는 것입니다. 이러한 방식으로, 기능 다중화는 프로토 타입에서 메소드를 정의하여 달성되며 각 인스턴스에 고유 한 속성이 있는지 확인할 수도 있습니다.
기본 모델
함수 superType (name) {this.name = name; this.colors = [ "Red", "Blue", "Green"];} supertype.prototype.sayname = function () {alert (this.name);}; 함수 하위 유형 (이름, age) {// 상속 속성 superType.call (this, name); this.age = age;} // 상속 메소드 서브 타입 .prototype = new supertype (); subtype.prototype.constructor = subtype; subtype.prototype.sayage = function () {alert (this.age); var instast1 = new subtype ( "nicholas", 29); instance1.colors.push ( "black"); alert (instance1.colors); // "빨간색, 파란색, 녹색, 검은 색"인스턴스 1.sayName (); // "nicholas"; instance1.sayage (); // 29var instance2 = new subtype ( "Greg", 27); Alert (instance2.colors); // "빨간색, 파란색, 녹색"instance2.sayname (); // "greg"; instance2.sayage (); // 27장점
조합 상속은 프로토 타입 체인 및 빌린 생성자의 결함을 피하고 장점을 결합하며 JavaScript에서 가장 일반적으로 사용되는 상속 패턴이됩니다.
단점
결합 된 상속의 가장 큰 문제는 어쨌든 슈퍼 타입 생성자는 하위 유형 프로토 타입을 만들 때 한 번, 하위 유형 생성자 내부의 다른 시간은 두 번 호출된다는 것입니다. 하위 유형은 결국 SuperType 객체의 모든 인스턴스 특성을 포함하지만 하위 유형 생성자를 호출 할 때 이러한 속성을 무시해야합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.