In JavaScript wird dieses Zeigungsvermögen dynamisch verändert, und es ist sehr wahrscheinlich, dass dieser Zeigungsversorgungsbetrag während des Schreibens eines Programms versehentlich zerstört wird. Daher benötigen wir eine Technologie, die die Bedeutung davon beheben kann. Daher haben wir drei Methoden: Rufen, Anwenden und Binden, um das Zeigen dieses innerhalb des Funktionsgremiums zu ändern, da die Funktion die Konzepte des "Definitionskontexts", "Laufzeitkontext" und "Kontext kann geändert werden" enthält.
bewerben, rufen Sie an
Anwenden: Wenden Sie eine Methode eines bestimmten Objekts an und ersetzen Sie das aktuelle Objekt durch ein anderes Objekt
Rufen Sie an: Rufen Sie eine Methode eines Objekts auf, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen
Funktion person () {} person.Prototype = {attr: {Alter: 18, Sex: 'Mädchen'}, Say: function () {console.log ("mein Alter ist" + this.attr.age); console.log ("Ich bin ein" + this.attr.sex); }} var mary = new Person (); heiraten.say (); // mein Alter ist 18 // Ich bin ein MädchenÄndern Sie die Richtung
Funktion person () {} person.Prototype = {attr: {Alter: 18, Sex: 'Mädchen'}, Say: function () {console.log ("mein Alter ist" + this.attr.age); console.log ("Ich bin ein" + this.attr.sex); }} xiaoming = {attr: {Alter: 20, Sex: 'Boy'}}; var hary = new Person (); Marry.say (); Marry.say.call (Xiaoming); // Mein Alter ist 18 // Ich bin ein Mädchen // Mein Alter ist 20 // Ich bin ein JungeWas ist häufig
Beide können verwendet werden, um eine Methode anstelle eines anderen Objekts aufzurufen, wodurch der Objektkontext einer Funktion vom anfänglichen Kontext in das von ThisOBJ angegebene neue Objekt geändert wird.
Der Unterschied
1. Anwenden: Es kann höchstens zwei Parameter geben - das neue dieses Objekt und ein Array Argarray. Wenn Sie mehrere Parameter an diese Methode übergeben, schreiben Sie alle Parameter in dieses Array. Selbst wenn es nur einen Parameter gibt, muss es in das Array geschrieben werden. Wenn Argarray kein gültiges Array ist oder kein Argumenteobjekt ist, wird ein Typeerror generiert. Wenn keine Argumente vorgelegt werden, wird das globale Objekt als thisoBJ verwendet und kann keine Argumente übergeben werden.
Fun.call (thisArg [, arg1 [, arg2 [, ...]]) Funktion f (x, y) {console.log (x+y);} f.call (null, 1, 1) // return 22. Anruf: Es handelt sich um eine direkte Parameterliste, die hauptsächlich verwendet wird, wenn verschiedene Methoden des JS -Objekts zueinander aufgerufen werden, sodass der aktuelle Zeiger konsistent bleibt oder in besonderen Fällen dieser Zeiger geändert werden muss. Wenn dieser OBJ -Parameter nicht bereitgestellt wird, wird das globale Objekt als thisoBJ verwendet.
fun.apply (thisArg, [argsArray]) Funktion f (x, y) {console.log (x+y);} f.call (null, [1,1]) // return 2Apply entspricht der Aufruffunktion, mit der Ausnahme, dass die Eingangsparameterliste in Form unterschiedlich ist. ThisArg ist der Kontext, den Sie angeben möchten. Es kann jedes JavaScript -Objekt sein (alles in JavaScript ist ein Objekt). Der Anruf muss die Parameter in der Reihenfolge übergeben, während angewendet wird Parameter in einem Array.
Wenn die Anzahl der Parameter einer Funktion nicht festgelegt ist, verwenden Sie den Anruf, wenn Ihre Parameter klar die Menge kennen, und verwenden Sie Anwendung, wenn er ungewiss ist, und drücken Sie den Parameter in das Array und geben Sie sie ein. Wenn die Anzahl der Parameter ungewiss ist, kann die Funktion auch alle Parameter durch das Argumente -Array durchqueren. Werfen wir einen Blick auf die Verwendung
Code 1
var array1 = [12 , "foo" , {name:"Joe"} , -2458];var array2 = ["Doe" , 555 , 100];Array.prototype.push.apply(array1, array2);console.log(array1);//[12, "foo", Object, -2458, "Doe", 555, 100]Code zwei
var numbers = [5, 458, 120, -215]; Math.max.Apply (Null, Zahlen); // 458
Code drei
log (12, "foo", {name: "joe"}, -2458); Funktion log () {var args = array.prototype.slice.call (Argumente); args.unshift ('(App)'); console.log.apply (Konsole, args);}; // (App) 12 Foo -Objekt {Name: "Joe"} -2458binden
Fun.bind (thisArg [, arg1 [, arg2 [, ...]]]])
Im Gegensatz zu den oben genannten wird Bind eine neue Funktion zurückgeben, die diesen Zeigewechsel ändert. Beachten Sie, dass die neue Funktion hier hervorgehoben wird, was nicht dieselbe Speicheradresse ist wie die zuvor verwendete. Die beiden oben genannten Funktionen sind die zurückgegebenen Ausführungsergebnisse, dh der Anruf wird ausgeführt.
Eine weitere zu beachten, dass die Zeile zusätzlich zu beachten ist, dass der erste Parameter in der Bindungsfunktion automatisch zum Standardwert für die Rückgabe der Parameter in der neuen Funktion wird. Wenn der offizielle Anruf aufgerufen wird, müssen Sie nur die verbleibenden Parameter mit Ausnahme des ersten Parameters angeben.
Funktion f (x, y) {console.log (x+y);} f.call (null, [1,1]) var new_f = f.bind (null, 1,1) // Neue FunktionNew_f (1) // zurückgeben 2 zurückgeben 2Es ist zu beachten, dass der diesarg -Parameter in allen oben genannten Beispielcodes durch Null ersetzt wird. Wenn dieses ARG -Objekt nicht angegeben ist, ist dieses Zeigen ein globales Objekt unter Null und Undefiniert, dh die JS -Code -Ausführungsumgebung
Bewerben, anrufen, Vergleiche binden
var obj = {bar: 'oops, das ist eine schlechte Idee'}; var foo = {get: function () {return this.bar; }} var bind = foo.get.bind (obj), call = foo.get.call (obj), apply = foo.get.Apply (OBJ); console.log (bind (), call, bewerben); console.log (binden, rufen, anwenden); console.log (typeof bind, typeof call, typeof anwenden); console.log (typeof bind (), typeof call, typeof anwenden);Ich sehe keinen Unterschied. Der Unterschied besteht darin, dass wenn Sie den Kontext ändern möchten, er nicht sofort ausgeführt wird, der Rückruf wird jedoch die Methode Bind () verwenden. Bewerben/Anruf führt die Funktion sofort aus
anwenden, rufen, bindend werden verwendet, um das Zeigen dieses Objekts der Funktion zu ändern. Die ersten Parameter von Anwenden, Aufruf, Bind sind alle Objekte, auf die dies hinweisen sollte, dh der zu spezifizierte Kontext; anwenden, aufrufen, bind kann nachfolgende Parameter zum Übergeben von Parametern verwenden. Bind gibt die entsprechende Funktion zurück, die zum späteren Aufrufen bequem ist. Bewerben, Anruf wird sofort aufgerufen
Der obige Artikel versteht den Unterschied zwischen den Methoden des Aufrufens, der Anwendung und des Bindens in JavaScript. Dies ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.