我对如何使用原型继承实现代码重用感到困惑。我正在关注http://alexsexton.com/?p=51的示例,它创建一个Speaker对象并使用jQuery将其桥接。
说我想要一个类似于示例中的新扬声器,但现在需要一个额外的声音文件。我能想到的唯一代码是:
var AnotherSpeaker = Object.create(Speaker);
$.extend(true, AnotherSpeaker, {
init: function(options, elem){
this.options.soundFile = options.soundFile || this.options.soundFile;
Speaker.init.call(this, options, elem);
},
options:{
soundFile: 'abc.wav'
},
_playSound: function(){
//....code to play the sound this.options.soundFile;
},
speak: function(msg){
this._playSound();
Speaker.speak.call(this, msg);
}
});
$.plugin('AnotherSpeaker', AnotherSpeaker); //jquery plugin bridge
但这种方法听起来对我来说非常“经典”。我通过Speaker.xxx.call
打电话给'超级'。我想我想做差异继承但是不知道怎么做?有什么帮助吗?
答案 0 :(得分:0)
您已经在进行差异继承(指定AnotherSpeaker
与Speaker
)的不同之处。
关于您通过Speaker.speak
向call
发送“超级电话”的问题:是的,这很痛苦。超级电话是JavaScript无法帮助您开箱即用的领域。使用您正在使用的结构,这可能是最好的方法。
几年前I defined a system使超级电话既轻松又高效。它涉及使用辅助函数来创建构造函数(我在文章中将它们称为类,这是我当时没有在我脑海中进行类到原型转换的人工制品),但除了术语之外,它是实际上是典型的继承。您可能会觉得有帮助。
答案 1 :(得分:0)
当面向对象是新的时,通常认为继承有利于代码重用。更新的智慧是继承创建了高耦合,并且通常使用聚合而不是继承来更好地启用重用。
我无法联系到你链接的文章,所以我不能更具体地说明你的情况。