猿问

有关寄生组合式继承的疑问

今天在《JavaScript高级程序设计》中看到有关寄生组合式继承的代码,有点迷惑,测试的时候的结果又不是我想像的结果,望大神给予指教

这个是书上看到的代码

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;

}


function inheritPrototype(subType, superType){

    var prototype = Object(superType.prototype);

    subType.prototype = prototype;

    subType.prototype.constructor = subType;

}


inheritPrototype(SubType, SuperType);


SubType.prototype.sayAge = function(){

    alert(this.age);

}

我通过在谷歌开发者工具里面测试,发现执行之后

SubType.prototype == SuperType.prototype //true

而且两个原型的constructor属性都指向 SubType函数

有点不理解,javascript中的原型继承是什么样子的,这样的继承方法岂不是把父“类”中的方法也给改变了??

请大神解惑,谢谢


繁花不似锦
浏览 419回答 1
1回答

噜噜哒

var prototype = Object(superType.prototype);//这一句,请把它改成var prototype = object(superType.prototype);注意object的大小写,它原来object的源码是这样的function object(o){    function F(){};    F.prototype = o;    return new F(); //注意这里,你这样得到的对象一个临时对象}//而SubType.prototype = object(SuperType.prototype); //实际上是SubType.prototype = new F(); //所以实际的结构是SubType.prototype.__proto__ = SuperType.prototype; //形成了原型链,以此达到继承的目的
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答