猿问

js中寄生组合式继承的疑问?

function object(o){

    function F(){}

    F.prototype = o;

    return new F();

}


function inheritPrototype(subType, superType){

    var prototype = object(superType.prototype);

    prototype.constructor = subType;

    subType.prototype = prototype;

}


function SuperType(name){

    this.name = name;

    this.clolors = ['red', 'blue', 'green'];

}


SuperType.prototype.sayName = function (){

    alert(this.name);

}


function SubType(name, age){

    SuperType.call(this, name);

    this.age = age;

}


SubType.prototype = inheritPrototype(subType, superType);

SuperType.prototype.sayAge = function (){

    alert(this.age);

}

这里是高程里实现寄生组合式继承的方法,我有一点想不明白:


function object(o){

    function F(){}

    F.prototype = o;

    return new F();

}


function inheritPrototype(subType, superType){

    var prototype = object(superType.prototype);

    prototype.constructor = subType;

    subType.prototype = prototype;

}

这两个函数实现的效果和subType.prototype.__proto__ = superType.prototype有什么区别呢?如果没有区别,为什么非要用两个函数来实现?


宝慕林4294392
浏览 617回答 1
1回答

心有法竹

高级程序设计中没有定义object函数吧,inheritPrototype中调用的是Object构造函数,返回一个新对象,具有和superType.prototype中一样的属性和方法,这样一来,每个实例继承的原型就不指向同一个原型对象(但是都是通过superType.prototype创建的副本)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答