需要帮助扩展javascript对象

时间:2011-03-07 18:53:51

标签: javascript jquery extend

假设我有一个javascript对象......

app.dooDad = {}
(function (O) {

    O.magicStuff = function() {

        alert("LOL!");

    }

    ...other methods...

})(app.doodad)

现在让我说我制作了这个对象的深层副本......

app.specialDooDad = jQuery.extend(true, {}, app.dooDad);
(function (O) {

    O.magicStuff = function() {

        alert("LOL!");
        alert("Cats!");

    }

})(app.doodad)

我想知道:有更好的方法吗?也就是说,有没有更好的方法来扩展方法magicStuff与specialDooDad中的附加命令,而不重写它?

感谢(提前)寻求帮助。

2 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但我相信你可以在Javascript中做这样的事情:

app.specialDooDad = jQuery.extend(true, {}, app.dooDad);
(function (O) {

    O.oldMagicStuff = O.magicStuff;

    O.magicStuff = function() {

        //Additional stuff you want to do
        alert("Cats!");
        O.oldMagicStuff();

    }

})(app.doodad)

只有在“原始”功能运行之前或之后添加额外的一两件事情时才能正常工作。如果您需要在中间添加内容,我相信您只需要重写该功能。

我假设您要这样做以保持与现有代码库(例如开源库)的向后兼容性?

答案 1 :(得分:0)

function DooDad() {
    this.magicStuff = function() {
         alert("LOL!");
    }
}

app.dooDad = new ConstructorA();

function SpecialDooDad() {
    var o = new DooDad;

    this.magicStuff = function() {
         o.magicStuff.apply(this, arguments);
         alert("Cats!");
    }

}

app.specialDooDad = new SpecialDooDad;

我更喜欢这种扩展方式。它功能更强大。您可以通过合成和扩展来创建新对象。