今天在《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中的原型继承是什么样子的,这样的继承方法岂不是把父“类”中的方法也给改变了??请大神解惑,谢谢
1 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
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; //形成了原型链,以此达到继承的目的
添加回答
举报
0/150
提交
取消