Mit Javascripts .call()
und .apply()
Methoden können Sie den Kontext für eine Funktion festlegen .
var myfunc = function(){
alert(this.name);
};
var obj_a = {
name: "FOO"
};
var obj_b = {
name: "BAR!!"
};
Jetzt können Sie anrufen:
myfunc.call(obj_a);
Welches würde alarmieren FOO
. Umgekehrt obj_b
würde das Vorbeigehen alarmieren BAR!!
. Der Unterschied zwischen .call()
und .apply()
besteht darin, dass .call()
eine durch Kommas getrennte Liste verwendet wird, wenn Sie Argumente an Ihre Funktion übergeben und .apply()
ein Array benötigen.
myfunc.call(obj_a, 1, 2, 3);
myfunc.apply(obj_a, [1, 2, 3]);
Daher können Sie hook
mit der apply()
Methode einfach eine Funktion schreiben . Zum Beispiel möchten wir der jQuerys- .css()
Methode ein Feature hinzufügen . Wir können die ursprüngliche Funktionsreferenz speichern, die Funktion mit benutzerdefiniertem Code überschreiben und die gespeicherte Funktion aufrufen.
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
Da das magische arguments
Objekt ein Array-ähnliches Objekt ist, können wir es einfach an übergeben apply()
. Auf diese Weise garantieren wir, dass alle Parameter an die ursprüngliche Funktion übergeben werden.