Heim >Web-Frontend >js-Tutorial >Eingehende Analyse der Fähigkeiten zum Anwenden, Aufrufen und Binden in JS_Javascript
In Javascript ist Funktion ein Objekt. Der this-Zeiger im Function-Objekt hängt davon ab, wie die Funktion aufgerufen wird. Mithilfe von „Apply“, „Call“ und „Bind“ kann der Zeiger im Funktionsobjekt geändert werden. Bevor wir über die Unterschiede sprechen, fassen wir die Ähnlichkeiten zwischen den dreien zusammen:
1. Sie werden alle verwendet, um den Punkt dieses Objekts der Funktion zu ändern.
2. Der erste Parameter ist das Objekt, auf das dieser zeigt.
3. Sie können nachfolgende Parameter verwenden, um Parameter zu übergeben.
Aufrufmethode:
Syntax: call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Definition: Rufen Sie eine Methode eines Objekts auf, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
Beschreibung: Mit der Call-Methode kann eine Methode anstelle eines anderen Objekts aufgerufen werden. Die Aufrufmethode ändert den Objektkontext einer Funktion vom Anfangskontext in das durch thisObj angegebene neue Objekt.
Wenn der Parameter „thisObj“ nicht angegeben wird, wird das globale Objekt als „thisObj“ verwendet.
Bewerben:
Syntax: apply(thisObj, Array-Parameter)
Definition: Eine Methode eines Objekts anwenden und das aktuelle Objekt durch ein anderes Objekt ersetzen
Hinweis: Wenn der Parameter kein Array-Typ ist, wird ein TypeError gemeldet.
binden:
Eine Methode namens bind wurde in EcmaScript5 erweitert (wird von IE6, 7 und 8 nicht unterstützt) und ist dem Aufruf sehr ähnlich. Die akzeptablen Parameter sind beispielsweise in zwei Teile unterteilt und der erste Parameter wird als verwendet eine Ausführung Das Objekt davon im Funktionskontext. Es gibt zwei Unterschiede:
①Der Rückgabewert von bind ist eine Funktion. ②Die Verwendung nachfolgender Parameter ist ebenfalls unterschiedlich
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); }
add.call(sub,3,1);Das Ergebnis ist 4
add.apply(sub,[3,1]);Das Ergebnis ist 4
add.bind(sub)(3,1); das Ergebnis ist 4
Sie können sehen, dass die Ausgabeergebnisse gleich sind, die Verwendung der übergebenen Parameter jedoch unterschiedlich ist
Sehen Sie sich Beispiel 2 an:
function jone(name,age,work){ this.name=name; this.age=age; this.work=work; this.say=function(msg){ alert(msg+",我叫"+this.name+",我今年"+this.age+"岁,我是"+this.work) } } var jack={ name:"jack", age:'24', work:"学生" } var pet=new jone(); pet.say.apply(jack,["欢迎您"]) console.log(this.name)Für den Anruf benötigen Sie Folgendes:
Für die Bewerbung benötigen Sie Folgendes:
pet.say.apply(jack,["Willkommen!"])
Zum Binden benötigen Sie Folgendes:
pet.say.bind(jack,"Welcome")()
Zu diesem Zeitpunkt wird console.log (this.name) ausgegeben und festgestellt, dass this.name jack ist und sich der Kontext geändert hat
Die obige ausführliche Analyse von Anwenden, Aufrufen und Binden in JS ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie Script Home unterstützen.