대상을 대상으로 하는 세 가지 방법으로 계승의 장단점을 실현하고 개선하다

1399 단어
function Shape() {}

function Rect() {}

//  1
Rect.prototype = new Shape();

//  2
Rect.prototype = Shape.prototype;

//  3
Rect.prototype = Object.create(Shape.prototype);

Rect.prototype.area = function () {
  // do something
};

방법 1:
  • 장점: 원형 체인을 정확하게 설정하여 계승을 실현한다
  • 장점: 부류 실례 속성이 계승되고 원형 체인 검색 효율이 높아지며 일부 속성에 합리적인 기본값을 제공할 수 있다
  • 단점: 부류 실례 속성이 인용 유형일 때 부적절하게 수정하면 모든 부류가 수정됩니다

  • .단점: 부류 실례를 서브클래스의 원형으로 만들 때 구조 함수에 필요한 합리적인 파라미터를 확정할 수 없다. 이렇게 제공된 파라미터가 서브클래스에 계승되는 것은 실제적인 의미가 없고 서브클래스가 이런 파라미터를 필요로 할 때 구조 함수에서 초기화하고 설정해야 한다
  • 요약: 계승은 속성이 아니라 계승 방법이어야 하고 하위 클래스에 부류 실례 속성을 설정하는 것은 하위 구조 함수에서 부류 구조 함수를 호출하여 초기화해야 한다

  • 방법 2:
  • 장점: 원형 체인을 정확하게 설정하여 계승을 실현한다
  • 단점: 부류 구조 함수 원형은 자류와 같다.하위 클래스 원형 추가 방법을 수정하면 상위 클래스가 수정됩니다

  • 방법 3:
  • 장점: 원형 체인을 정확하게 설정하고 방법 1.2의 단점을 피한다
  • 단점: ES5 방법은 호환성에 주의해야 한다

  • 향상된 기능:
    모든 세 가지 방법은 하위 구조 함수에서 상위 구조 함수를 호출하여 실례 속성 초기화를 실현해야 한다
    function Rect() {
        Shape.call(this);
    }
    
  • 하위 클래스의 기본 원형을 새로 만든 객체로 대체하고 Rect를 설정합니다.prototype.constructor = Rect;일치성을 보증하다
  • 세 번째 방법의polyfill:
  •     if (typeof Object.create !== "function") {
            Object.create = function (proto) {
                function f() {};
                f.prototype = obj;
                return new f();
            }
        }
    

    좋은 웹페이지 즐겨찾기