返回信息流由于subType不是superType的实例,那么subType中就没有[[Prototype]]指向superType,原型链就断了啊,那么书中为什么还说原型链没有改变呢
这是一条镜像帖。来源:北邮人论坛 / www-technology / #39303同步于 2016/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
【问题】js高程中的继承
qqpp3939
2016/11/22镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
仅仅这几行代码,只是将superType的原型给搬过来给subType用,和superType本身没有任何关系。
参考http://blog.csdn.net/tongle_deng/article/details/7730632
注意看
function SubType(name,age){
SuperType.call(this,name);
this.age = age;
}
SuperType.call(this,name); 这一句才是将SuperType本身的东西继承。
这些加起来,才叫寄生组合式继承
【 在 qqpp3939 的大作中提到: 】
: [upload=1][/upload]
: 由于subType不是superType的实例,那么subType中就没有[[Prototype]]指向superType,原型链就断了啊,那么书中为什么还说原型链没有改变呢
【 在 mima031103 的大作中提到: 】
: 仅仅这几行代码,只是将superType的原型给搬过来给subType用,和superType本身没有任何关系。
: 参考http://blog.csdn.net/tongle_deng/article/details/7730632
: 注意看
: ...................
superType.call(this,name); 只是让不同的subType实例拥有自己的属性,
原型链是指subType的原型是superType的实例,所以subType的原型中会有一个[[Prototype]]指向superType,现在只是将superType的原型给搬过来给subType用,和superType本身没有任何关系,那原型链就不存在啊,原型链是不是红色的那一条啊?
组合是继承需要的就只是超类原型的一个副本而已。
var prototype=Object(superType.prototype)
这个就是副本,也就是图中的superType和他的原型。
红色的那一条就是:
subType.prototype=prototype 其实就算是原型链了。
体会一下的话真的能感到“寄生”的那种感觉。完全是“寄生”在超类上,用超类的原型。
另外,我觉得那个constructor应该指向subType。本来应该是指向超类superType的。
感觉就像是,创建了一个超类副本,然后又把他拆的七零八落的,把原型拿去给子类用。
【 在 qqpp3939 的大作中提到: 】
:
: superType.call(this,name); 只是让不同的subType实例拥有自己的属性,
: 原型链是指subType的原型是superType的实例,所以subType的原型中会有一个[[Prototype]]指向superType,现在只是将superType的原型给搬过来给subType用,和superType本身没有任何关系,那原型链就不存在啊,原型链是不是红色的那一条啊?
: ...................