[英]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.