为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2018-11-22 18:14:40
今天在《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; //形成了原型链,以此达到继承的目的


查看完整回答
反对 回复 2018-12-31
  • 1 回答
  • 0 关注
  • 418 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信