객체 지향 자바 스크립트 프로그래밍 (상속)을 재 학습

1. 상속

ES는 구현 상속과 구현 상속이 주로 달성하기 위해 프로토 타입 체인에 따라 지원합니다.

2. 프로토 타입 체인

ES 개념 프로토 타입은, 주쇄 및 방법 원형으로 구현 상속 체인에 기재된. 기본적인 아이디어는 참조 형식은 참조 프로퍼티와 메소드의 또 다른 유형에서 상속하게 프로토 타입을 사용하는 것입니다.

리콜 관계 생성자, 프로토 타입 및 예

각 생성자는 프로토 타입 객체는 생성자에 대한 포인터를 가리키는지고, 예를 들어 모든 프로토 타입 객체에 대한 포인터를 포함, 프로토 타입 객체를 가지고있다. 우리가 만드는 경우 그래서 프로토 타입 객체 유형의 다른 인스턴스와 동일합니다. 이 때, 다음 프로토 타입 객체는 다른 프로토 타입을 가리키는 포인터, 대응, 또 다른 프로토 타입이 또 다른 생성자에 대한 포인터를 가리키는 포함 포함됩니다.

프로토 타입이 다른 타입 프로그레시브 층의 또 다른 예이다 경우 또한, 그 예 및 프로토 타입 체인을 구성한다. 이것은 기본 개념 프로토 타입 체인입니다.

function SuperType(){
    this.property = true
}

SuperType.prototype.getSuperValue = function(){
    retrun this.property
}

function SubType(){
    this.subproperty = false
}

// 继承了 SuperType
SubType.prototype = new SuperType()
SubType.prototype.getSubValue = function(){
    retrun this.subproperty;
}

var instance = new SubType()
instance.getSuperValue()    // true
위의 코드는 두 가지 유형을 정의한다 :

상위 유형 및 하위 유형. 각 속성은 각각 입력 및 방법이있다. 주요 차이점은 다음과 같습니다

하위 유형은 상위 유형을 상속 및 상속은 인스턴스 슈퍼 타입을 만드는 것입니다, 그 인스턴스 SubType.prototype 구현을 할당합니다. 에센스 프로토 타입 객체 구현은 유형의 새 인스턴스로 대체, 다시 작성됩니다.

이제 본 SubType.prototype에 다른 단어 수퍼 타입의 인스턴스에있는 모든 방법 및 특성이다. SubType.prototype 후 따라서 새로운 방법을 추가 한 기본 특성 및 퍼의 메소드를 상속하는 수단을 추가한다. 인스턴스 및 생성자와 프로토 타입 사이의 관계의이 실현.

인스턴스를 액세스 할 때 원형 체인을 구현함으로써 확장 검색 메커니즘 프로토 타입은 본질적으로 실시 예에서 상기 제 특성에 대한 모드 탐색을 읽어 때문이다. 속성이 발견되지 않는 경우, 검색은 프로토 타입의 인스턴스를 계속합니다. 프로토 타입 체인을 통해 상속의 경우, 검색 과정은 프로토 타입 체인을 계속하는 것입니다. 마지막 단계까지 방법을 찾을 수 있습니다. 프로퍼티와 메소드의 경우를 찾을 수없는에서 검색 프로세스는 항상 앞으로 중지됩니다 프로토 타입 체인에 반지입니다.

3. 기본 프로토 타입

모든 참조 형은 기본 개체 상속, 이것은 달성하기 위해 프로토 타입 체인을 통해 상속됩니다. 기본 기능은 객체의 모든 인스턴스의 프로토 타입입니다 따라서는 기본 프로토 타입 내부 포인터 Object.prototype에 포함됩니다. 그 이유는 모든 사용자 정의 유형을 상속 toString () 디폴트의 valueOf () 메소드입니다

프로토 타입 사이의 관계 및 실시 예 4

당신은 결정 두 가지 방법의 프로토 타입 예 사이의 관계 할 수있다. 첫 번째 방법은 프로토 타입 체인을 테스트하기 위해 운영자가 인스턴스 생성자를 통해 발생으로 결과가 긴로 true를 반환하고, instanceof 연산자를 사용하는 것입니다. 다음과 같습니다 :

instance instanceof Object  // true

두 번째 방법은 isPrototypeOf ()만큼 원형 prototype 체인이 있었던 것에 따라, 원형 고리의 프로토 예라고 할 수있어서, 동일한 도출되고, 따라서 isPrototypeOf () 메소드는 또한 사실 반환

Object.prototype.isPrototypeOf(instance)    // true

5. 신중있어서 정의

하위 유형이 때로는 슈퍼 클래스 유형을 무시하거나 슈퍼 타입의 방법이 존재하지 않는 추가해야하지만, 어떤 경우에해야 할 프로토 타입 방법을 추가하는 코드 뒤에 위치해야 문은 프로토 타입을 대체

function  SuperType() {
    this.property = true
}

SuperType.prototype.getSuperValue = function(){
    retrun this.property
}

function SubType() {
    this.subproperty = false
}
----
// 继承了SuperType
SubType.prototype = new SuperType()

// 添加新方法
SubType.prototype.getSubValue = function(){
    retrun this.subproperty
}
//重写超类型中的方法
SubType.prototype.getSuperValue = function(){
    retrun false
}
-----
var instance = new SubType()
instance.getSuperValue()    // false
상기 코드는 상기 방법의 두 개의 이격 된 부분에서 정의된다.

첫 번째 방법은 getSubValue () 서브 타입에 첨가하고, 두 번째 방법 getSuperValue () 메소드 원형 체인 이미 존재하고 있지만이 방법은 차폐의 원래 방식을 재정의한다.

인스턴스 하위 유형 통화 getSuperValue가 ()이 메소드가 불려 재정의 즉,하지만, 원래의 메소드를 호출하는 것입니다의 getSuperValue 슈퍼 예 ()를 호출하여, 모든 슈퍼 타입으로해야합니다 또한, 프로토 타입 예 후,이 두 가지 방법의 정의.

참고 : 달성하기 위해 프로토 타입 체인을 통해 상속 할 때, 당신이 프로토 타입을 오버라이드 (override) 때문에, 객체 리터럴을 사용하는 프로토 타입 방법을 만들 수 없다.

질문 6. 프로토 타입 체인

프로토 타입 체인은 매우 강력하지만, 당신은 상속을 구현하는 데 사용할 수 있지만, 몇 가지 문제가있다.

1 기준값 형식에서 프로토 타입을 포함하는 방법. 프로토 타입 이전에 포함하는 참조 속성 유형 값은 모든 인스턴스가 공유 말했다. 그래서이 프로토 타입 객체에 정의 된 속성의 원인은 왜 생성자에, 그리고. 상속이 프로토 타입에 의해 구현 될 때, 프로토 타입은 실제로 다른 유형의 예를 될 것입니다. 따라서, 현재 프로토 타입 속성에 원래 인스턴스 속성 자연스럽게.

서브 타입의 인스턴스를 생성 할 때 (2)는, 상기 수퍼 타입의 생성자에 파라미터를 전달할 수 없다. 사실에서 모든 개체 인스턴스가 슈퍼 타입 생성자 통과 매개 변수 A를 케이스에 영향을주지 않는 방법이 없다라고 할 수있다.

제 차용 생성자

서브 타입 생성자 내에서 슈퍼 타입의 생성자 호출의 사용. 그 생성자 ()에 적용하고, () 메소드의 호출에 의해 새로 생성 된 오브젝트들에 대해 수행 될 수있다.

7.1 패스 매개 변수

프로토 타입 체인에 대해, 생성자는 생성자의 슈퍼 서브 타입 생성자에 인수를 전달할 수있는 큰 장점을 가지고 빌려.

function s(name) {
    this.name = name
}

function b() {  
    // 继承 s,同时还传递参数
    s.call(this, 'nnn')
    // 实例属性
    this.age = 23
}

let i = new B()

i.name // nn
i.age  // 29

7.2 차용 생성자 문제

단지 생성자 빌려 경우는 생성자 모드 문제의 존재를 회피 할 수없는, 방법 생성자에 정의되어 있으므로 함수 재이용을 도모 할 수 없다. 상기 방법에 정의 수퍼 타입 ​​프로토 타입, 서브 타입의 관점에서 볼 수 없습니다. 모든 유형의 결과는 생성자 모드를 사용할 수 있습니다. 그래서 거의 단독으로 사용하지 생성자 모드를 빌려.

상속의 제 조합

또한, 의사 - 고전 상속이라고는 원형의 조합을 의미하고 생성자 기술 분야에서 체인 빌려. 모두의 강점의 상속 모드 중 하나를 재생합니다. 원리는 프로토 타입 구현 상속 체인 속성 및 메소드의 프로토 타입을 사용하고, 인스턴스가 빌린 생성자 상속 속성 달성하는 것이다.

9. 프로토 타입 상속

첫째, 기존 개체에 의해 새로운 객체를 생성 임시 생성자를 생성 한 다음 생성자의 프로토 타입으로 객체를 전달하고 임시 형의 새 인스턴스를 반환합니다.

10. 기생 상속

단지 승계 과정에 대한 캡슐화 기능을 만들고, 어떤 식 으로든 함수는 객체의 내부에 강화하고 개체를 반환합니다. 마찬가지로 우리가 할 수없는 다중 기능은 효율을 감소

11. 요약

ES 지원 프로그램을 객체 지향하지만, 클래스 또는 인터페이스를 사용하지 않습니다. 객체가 생성되고 코드 실행 동안 향상 될 수 있고, 오히려 엄격하게 정의 된 엔티티보다는 동적있다. 클래스가없는 경우, 공장 모델은 객체를 생성하는 생성자 모드, 프로토 타입 패턴을 사용할 수있다.

11.1 공장 패턴

간단한 기능을 가진 객체를 만들고 객체의 속성과 메소드를 추가 한 다음 개체를 반환합니다. 이 모드는 생성자 모드로 대체

11.2 생성자 모드

new 연산자로 사용할 객체 인스턴스를 만들 구축 할 수있는 사용자 정의 참조 형식을 만듭니다. 그러나, 생성자 모델은 회원들의 각각의 기능을 포함, 재사용 할 수없는 단점이있다. 함수 때문에 개체에 한정 될 수 없다. 그래서 여러 개체간에 공유가 더 이상 기능을 할 이유가 없다.

11.3 프로토 타입 모델

이러한 속성을 지정하는 생성자의 프로토 타입 속성을 사용하여 방법을 공유해야한다. 생성자 인스턴스 속성을 사용하여, 조합 및 프로토 타입 모델 생성자 모드에서 사용할 때 정의 및 프로토 타입 공유 프로퍼티와 메소드를 사용하여 정의됩니다.

JS 주로 원형 상속 체인을 통해 달성. 프로토 타이핑 가닥은 인스턴스의 프로토 타입 구현이 다른 종류의 생성자에 할당된다. 이러한 방법으로, 아이는 속성과 슈퍼 타입의 방법의 모든 유형에 액세스 할 수 있습니다. 이 및 클래스 기반 상속은 매우 유사하다.

문제의 프로토 타입 체인이 공유 객체 인스턴스 그러므로 모든 속성과 메소드, 혼자 사용하기에 적합하지를 상속합니다. 이 문제를 해결하려면 우리는 하위 유형의 생성자에서 슈퍼 클래스 생성자 유형을 호출하는 생성자의 도움이 필요합니다. 단지 생성자 모드를 보장하는 유형을 정의하면서는, 자신의 특성 각 인스턴스가 수행 할 수 있습니다.

11.4 프로토 타입 상속

상속은 본질적으로 특정 개체의 단순 복사본을 수행하는 소정의 생성자없이 구현 될 수있다. 그리고 복사본의 복사본을 더 개혁 할 수 있습니다 얻을

11.5 기생 상속

그리고 프로토 타입 상속은 매우 유사하지만 개체 또는 일부 정보를 기반으로 객체를 생성하고 객체를 강화하고, 마지막으로 오브젝트를 돌려줍니다. 비 효율성을 주도 유형 생성자를 통해 다수의 호출에 의한 상속 패턴의 조합을 해결하기 위해,이 모드는 상속의 조합으로 사용될 수 있으며,

11.6 복합 기생 상속

기생 콜렉터 상속 및 상속의 조합의 장점은, 가장 효과적인 방법은 상속 유형에 기초

공공 우려 적은 수의 [학생] 야오

더 작은 공공 부드러운 급우 없습니다

추천

출처www.cnblogs.com/lieone/p/11611528.html