[대상을 대상으로 하는 프로그램 설계(7)] 기생식 계승과 기생 조합식 계승

2021 단어

기생식 계승


기본적인 사고방식


봉인 계승 과정에만 사용되는 함수를 만듭니다. 이 함수는 내부에서 어떤 방식으로 대상을 강화하고, 마지막에는 모든 작업을 한 것처럼 대상을 되돌려줍니다.
function createAnother(original){
    var clone = Object(original);     // 
    clone.sayHi = function(){
        alert("hi");
    }
    return clone;
}

var person = {
    name:"Wonder",
    colors:["blue","green"]
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi();  //"hi"

기생식 계승은 함수를 복용할 수 없기 때문에 효율이 떨어진다.

기생 조합식 계승


조합 계승의 가장 큰 문제는 두 번의 초유형 구조 함수를 호출하는 것이다. 한 번은 하위 유형의 원형을 만들 때, 다른 한 번은 하위 유형의 구조 함수 내부에 있다.
function SuperType(name){
    this.name = name;
    this.colors = ["red","blue","green"];
}

SuperType.prototype.sayName = function () {
    alert(this.name);
};

function SubType(name,age){
    SuperType.call(this,name);        // SuperType()

    this.age = age;
}
SubType.prototype = new SuperType();   // SuperType()
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function () {
    alert(this.age);
};

기본적인 사고방식


구조 함수를 빌려 속성을 계승하고 원형 체인의 혼성 형식을 통해 계승하는 방법.기생식 계승을 사용하여 초유형의 원형을 계승한 다음에 결과를 하위 유형의 원형에 지정한다.
function inheritPrototype(subType,superType){
    var prototype = Object(superType.prototype);  // 
    prototype.constructor = subType;              // 
    subType.prototype = prototype;                // 
}

function SuperType(name){
    this.name = name;
    this.colors = ["red","blue","green"];
}

SuperType.prototype.sayName = function () {
    alert(this.name);
};

function SubType(name,age){
    SuperType.call(this,name);

    this.age = age;
}

inheritPrototype(SubType,superType);

SubType.prototype.sayAge = function () {
    alert(this.age);
};

장점: 고효율 - 슈퍼타입 구조 함수를 한 번만 호출했기 때문에 SubType에서 사용하지 않는다.prototype 위에 불필요하고 불필요한 속성을 만듭니다.또 원형 체인은 변하지 않는다.

기생 조합식 계승은 인용 유형이 가장 이상적인 계승 모델이다.

좋은 웹페이지 즐겨찾기