假设我有一个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中的附加命令,而不重写它?
感谢(提前)寻求帮助。
答案 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;
我更喜欢这种扩展方式。它功能更强大。您可以通过合成和扩展来创建新对象。