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_bwü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 hookmit 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 argumentsObjekt 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.