Как переопределить функцию с переменным количеством параметров в 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);
}

Да, те, которые не были переданы, будут просто 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);
    };
Другие вопросы по тегам