javascript - 有关寄生组合式继承的疑问
本文介绍了javascript - 有关寄生组合式继承的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
今天在《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中的原型继承是什么样子的,这样的继承方法岂不是把父类中的方法也给改变了??
请大神解惑,谢谢
解决方案
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; //形成了原型链,以此达到继承的目的
这篇关于javascript - 有关寄生组合式继承的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文