Как переопределить функцию с переменным количеством параметров в JavaScript?
Я хочу переопределить JQuery's 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 ответа
Решение
Ты можешь использовать .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);
}
Вы можете кэшировать старую шкуру, используя $.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);
};