Heim > Artikel > Web-Frontend > Detaillierte Erläuterung des Unterschieds zwischen Apply und Call in JavaScript
In diesem Artikel werden hauptsächlich die relevanten Kenntnisse zum Anwenden und Aufrufen von JavaScript vorgestellt. Hat einen sehr guten Referenzwert. Werfen wir einen Blick auf den Unterschied zwischen
Apply und Call
Die ECMAscript-Spezifikation definiert sowohl Call als auch Apply für alle Funktionen Methoden und ihre Anwendungen sehr breit, ihre Funktionen sind genau gleich, nur die Form der Parameterübergabe ist unterschiedlich.
apply( )
Die apply-Methode übergibt zwei Parameter: Einer ist das Objekt als Funktionskontext und der andere ist die Funktion Parameter. Array bestehend aus.
var obj = { name : 'linxin' } function func(firstName, lastName){ console.log(firstName + ' ' + this.name + ' ' + lastName); } func.apply(obj, ['A', 'B']); // A linxin B
Wie Sie sehen können, ist obj das Objekt, das als Funktionskontext verwendet wird, und dies zeigt in der Funktion func auf das Objekt obj. Die Parameter A und B werden im Array platziert und an die Funktion func übergeben, entsprechend den Listenelementen des Parameters func.
call( )
Der erste Parameter der Call-Methode ist auch das Objekt des Funktionskontexts, aber was später übergeben wird, ist es auch eine Parameterliste statt eines einzelnen Arrays.
var obj = { name: 'linxin' } function func(firstName, lastName) { console.log(firstName + ' ' + this.name + ' ' + lastName); } func.call(obj, 'C', 'D'); // C linxin D
Beim Vergleich können wir sehen, dass C und D als separate Parameter an die Funktion func übergeben werden, anstatt in einem Array platziert zu werden.
Sie müssen sich keine Gedanken darüber machen, wann Sie welche Methode anwenden. Wenn Ihre Parameter bereits in einem Array vorhanden sind, verwenden Sie natürlich apply. Wenn die Parameter verstreut sind und keine Korrelation zueinander aufweisen, verwenden Sie call.
Verwendung von apply und call
1. Ändern Sie dies, um auf
var obj = { name: 'linxin' } function func() { console.log(this.name); } func.call(obj); // linxinus Wie Sie wissen, ist der erste Parameter der Aufrufmethode das Objekt als Funktionskontext. Hier wird obj als Parameter an func übergeben. Dies zeigt in der Funktion auf das obj-Objekt. Die Funktion func entspricht hier tatsächlich
function func() { console.log(obj.name); }
2. Ausleihen von Methoden von anderen Objekten
Schauen Sie sich zuerst das Beispiel an
var Person1 = function () { this.name = 'linxin'; } var Person2 = function () { this.getname = function () { console.log(this.name); } Person1.call(this); } var person = new Person2(); person.getname(); // linxinAus dem Obigen können wir ersehen, dass das von Person2 instanziierte Objekt Person den Namen in Person1 über die Methode getname erhält. Da in Person2 die Funktion von Person1.call(this) darin besteht, das Person1-Objekt anstelle dieses Objekts zu verwenden, verfügt Person2 über alle
Attribute und Methoden in Person1, was dem Erben von Person2 entspricht Die Eigenschaften und Methoden von Person1.
3. Aufrufen von Funktionen
Die Methoden apply und call bewirken, dass die Funktion sofort ausgeführt wird, sodass sie auch zum Aufrufen von Funktionen verwendet werden können .function func() { console.log('linxin'); } func.call(); // linxin
Der Unterschied zwischen call und bind
Eine Methode namens bind wurde in Ecmascript5 erweitert und ist nicht mit niedrigeren Versionen des IE kompatibel. Es ist dem Aufruf sehr ähnlich. Der erste Parameter ist das Objekt als Funktionskontext und der zweite Teil des Parameters ist eine Liste, die mehrere Parameter akzeptieren kann. Die Unterschiede zwischen ihnen sind wie folgt.1.bind gibt eine Funktion zurück.
var obj = { name: 'linxin' } function func() { console.log(this.name); } var func1 = func.bind(obj); func1(); // linxinBind-Methode wird nicht sofort ausgeführt, sondern gibt einen geänderten Kontext dieser Funktion zurück . Dies wurde jedoch in der ursprünglichen Funktion func nicht geändert und zeigt weiterhin auf das globale Objektfenster.
2. Verwendung von Parametern
function func(a, b, c) { console.log(a, b, c); } var func1 = func.bind(null,'linxin'); func('A', 'B', 'C'); // A B C func1('A', 'B', 'C'); // linxin A B func1('B', 'C'); // linxin B C func.call(null, 'linxin'); // linxin undefined undefinedAufruf besteht darin, den zweiten und die folgenden Parameter als tatsächliche Parameter der Funktionsmethode zu übergeben Die tatsächlichen Parameter der func1-Methode werden tatsächlich auf der Grundlage der Parameter in bind angeordnet. In Browsern niedrigerer Versionen gibt es keine Bind-Methode, wir können auch selbst eine implementieren.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen Apply und Call in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!