如何在javascript中覆盖可变数量参数的函数?

时间:2012-02-01 17:42:08

标签: javascript jquery overloading function-overriding

我想在我的对象上覆盖jQuery的hide()函数。我希望它调用我的onHide()函数,然后调用原始hide()

如何做到这一点?

最简单的代码不会传递参数我想:

myobject.oldhide = myobject.hide;
myobject.onHide = function() {
   // something
};
myobject.hide = function() {
   this.onHide();
   this.oldhide();
}

jQuery的hide()最多接受3个参数。我可以定义其中的3个吗?

myobject.oldhide = myobject.hide;
myobject.onHide = function() {
   // something
};
myobject.hide = function(a,b,c) {
   this.onHide();
   this.oldhide(a,b,c);
}

3 个答案:

答案 0 :(得分:5)

您可以使用.apply()来调用原始文件:

this.oldhide.apply(this, arguments);

将调用oldhide,并将任何参数列表传递给您自己的函数,该函数列表不需要任何声明的参数:

myobject.oldhide = myobject.hide;

myobject.onHide = function() {
   // something
};

myobject.hide = function() {
   this.onHide();
   this.oldhide.apply(this, arguments);
}

答案 1 :(得分:2)

是的,未传入的内容只有undefined

答案 2 :(得分:0)

您可以使用$.proxy缓存旧版隐藏。

    myobject.oldhide = $.proxy(myobject.hide, myobject);
    myobject.onHide = function() {
       // something
    };
    //a, b, and c parameters don't have to be passed
    //but if they are they will be forwarded to the old hide.
    //Using $.proxy will preserve the way the old function takes parameters.
    myobject.hide = function(a, b, c) {
       this.onHide();
       this.oldhide(a, b, c);
    };