代码通过Javascript Prototypal继承重用

时间:2011-07-26 09:31:05

标签: javascript prototypal-inheritance

我对如何使用原型继承实现代码重用感到困惑。我正在关注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打电话给'超级'。我想我想做差异继承但是不知道怎么做?有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

您已经在进行差异继承(指定AnotherSpeakerSpeaker)的不同之处。

关于您通过Speaker.speakcall发送“超级电话”的问题:是的,这很痛苦。超级电话是JavaScript无法帮助您开箱即用的领域。使用您正在使用的结构,这可能是最好的方法。

几年前I defined a system使超级电话既轻松又高效。它涉及使用辅助函数来创建构造函数(我在文章中将它们称为类,这是我当时没有在我脑海中进行类到原型转换的人工制品),但除了术语之外,它是实际上是典型的继承。您可能会觉得有帮助。

答案 1 :(得分:0)

当面向对象是新的时,通常认为继承有利于代码重用。更新的智慧是继承创建了高耦合,并且通常使用聚合而不是继承来更好地启用重用。

我无法联系到你链接的文章,所以我不能更具体地说明你的情况。