簡體   English   中英

如何在JavaScript中使用可變數量的參數覆蓋函數?

[英]How to override function with variable number of parameters in javascript?

我想在對象上重寫jQuery的hide()函數。 我希望它調用我的onHide()函數,然后調用原始hide()

如何做到這一點?

我猜最簡單的代碼不會傳遞參數:

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

jQuery的hide()最多接受3個參數。 我可以只定義三個嗎?

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

您可以使用.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);
}

是的,那些沒有傳入的將是undefined

您可以使用$ .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);
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM