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

查看:97
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆