我创建this jsfiddle以显示我正面临的问题 我建议在继续阅读之前先看一下。
好的,现在我们准备好了。
如您所见,有一个类继承链:LeafDevice
- > EndDevice
- > SubNetDevice
- > NetDevice
- > Device
。
当我实例化一个新的LeafDevice
链时(即它以正确的顺序执行),但只设置LeafDevice
和EndDevice
的属性(查看控制台)。
当我运行更新方法时,它似乎每2跳一个类...我的意思是,你从输出中看到javascript似乎没有运行EndDevice.update()
和NetDevice.update()
方法...仅来自Device
,SubNetDevice
和LeafDevice
的属性已更新/添加(再次,请查看控制台)...
这让我抓狂,因为我无法弄清楚我做错了什么!!
我要做的是在我定义的继承链之后实例化一个LeafDevice
对象,以便最后它具有所有已定义的属性(myDeviceAttr
,myNetDeviceAttr
,{{1 }},mySubNetDeviceAttr
,myEndDeviceAttr
)。
你能否就这里发生的事情提出一些想法?
非常感谢你!!
答案 0 :(得分:1)
这是您用来调用更新EndDevice& amp;期待update EndDevice
出现
EndDevice.prototype.update.call(this, pDevice);
但是这里
EndDevice.prototype = new SubNetDevice;
您明确指定SubNetDevice的对象作为EndDevice的原型
因此,EndDevice.prototype.update相当于
var a = new SubNetDevice();
a.update()
因此,您无法在日志中看到update EndDevice
Net Device的原因也是一样。
尝试http://ejohn.org/blog/simple-javascript-inheritance/
上面链接中的扩展功能应解决您的问题
修复上面提到的小提琴,在LeafDevice中更改
EndDevice.prototype.update.call(this, pDevice);
要
LeafDevice.prototype.update.call(this, pDevice);
此更改是必需的,因为您需要调用LeafDevice的 - > EndDevice的 - >更新方法@ LeafDevice.prototype.update
但不是EndDevice.prototype
,这是EndDevice的 - > SubNetDevice的 - >更新方法
同样适用于所有课程
你错过了.call
SubNetDevice(this, pDevice);
这应该可以解决您的财产问题
http://jsfiddle.net/v6NsB/8/这是你的更新小提琴