Heim > Web-Frontend > js-Tutorial > Hauptteil

Vergleich der Verwendung der Call-Methode und der Apply-Methode in JavaScript_Grundkenntnisse

WBOY
Freigeben: 2016-05-16 15:45:34
Original
1462 Leute haben es durchsucht

Methodendefinition
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 stellvertretend für ein anderes Objekt 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.

Methode anwenden:
Syntax: apply([thisObj[,argArray]])
Definition: Wenden Sie eine Methode eines Objekts an, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
Beschreibung:
Wenn argArray kein gültiges Array oder kein Argumentobjekt ist, wird ein TypeError verursacht.
Wenn weder argArray noch thisObj bereitgestellt werden, wird das globale Objekt als thisObj verwendet und es können keine Parameter übergeben werden.

Häufige Beispiele
a、

function add(a,b) 
{ 
 alert(a+b); 
} 
function sub(a,b) 
{ 
 alert(a-b); 
} 
 
add.call(sub,3,1); 
Nach dem Login kopieren

Was dieses Beispiel bedeutet, ist, sub durch add zu ersetzen, add.call(sub,3,1) == add(3,1), also ist das laufende Ergebnis: alarm(4); // Hinweis: in js Die Funktion ist eigentlich ein Objekt und der Funktionsname ist eine Referenz auf das Funktionsobjekt.

b.

function Animal(){ 
 this.name = "Animal"; 
 this.showName = function(){ 
  alert(this.name); 
 } 
} 
 
function Cat(){ 
 this.name = "Cat"; 
} 
 
var animal = new Animal(); 
var cat = new Cat(); 
 
//通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 
//输入结果为"Cat" 
animal.showName.call(cat,","); 
//animal.showName.apply(cat,[]); 
Nach dem Login kopieren

Aufruf bedeutet, die Methode von animal zur Ausführung auf cat zu übertragen. Ursprünglich hatte cat keine showName()-Methode, sodass die Methode von animal zur Ausführung auf cat gestellt wird.

c. Vererbung implementieren

function Animal(name){  
 this.name = name;  
 this.showName = function(){  
  alert(this.name);  
 }  
}  
 
function Cat(name){ 
 Animal.call(this, name); 
}  
 
var cat = new Cat("Black Cat");  
cat.showName(); 
Nach dem Login kopieren

Animal.call(this) bedeutet, das Animal-Objekt anstelle dieses Objekts zu verwenden. Verfügt Cat dann nicht über alle Eigenschaften und Methoden von Animal?
d. Mehrfachvererbung

function Class10() 
{ 
 this.showSub = function(a,b) 
 { 
  alert(a-b); 
 } 
} 
 
function Class11() 
{ 
 this.showAdd = function(a,b) 
 { 
  alert(a+b); 
 } 
} 
 
function Class2() 
{ 
 Class10.call(this); 
 Class11.call(this); 
} 
Nach dem Login kopieren
Es ist ganz einfach: Verwenden Sie zwei Aufrufe, um eine Mehrfachvererbung zu erreichen

Natürlich gibt es auch andere Möglichkeiten, js zu erben, z. B. die Verwendung der Prototypenkette. Ich erkläre hier nur die Verwendung von Aufrufen. Apropos Call und natürlich Apply: Diese beiden Methoden bedeuten im Grunde dasselbe. Der Unterschied besteht darin, dass der zweite Parameter von Call von beliebigem Typ sein kann, während der zweite Parameter von Apply ein Array sein muss oder Argumente sein können 🎜>
Die Call- und Apply-Methoden in JavaScript werden hauptsächlich verwendet, um den Kontext des Funktionsobjekts zu ändern, dh den Inhalt, auf den dieses in der Funktion verweist.

Die Aufrufmethode ist wie folgt:

fun.call(obj1, arg1, arg2, ...);
fun.apply(obj2, [arrs]);

Nach dem Login kopieren
Spezifisches Beispiel:

var Obj1 = {
 name: 'Object1',
 say: function(p1, p2) {
  console.log(this.name + ' says ' + p1 + ' ' + p2);
 }
};

// logs 'Object1 says Good morning'
Obj1.say('Good', 'morning');

var Obj2 = {
 name: 'Object2'
};

// logs 'Object2 says Good afternoon'
Obj1.say.call(Obj2, 'Good', 'afternoon');

// logs 'Object2 says Good afternoon again'
Obj1.say.apply(Obj2, ['Good', 'afternoon again']);

Nach dem Login kopieren
Wie aus dem Beispiel ersichtlich ist, zeigt dies in der Methode beim Aufruf von say über die herkömmliche Methode auf Obj1, beim Aufruf über call und apply jedoch auf Obj2.

Wie aus dem Beispiel ersichtlich ist, sind die Funktionen von call und apply genau gleich, und der Unterschied in ihren Aufrufmethoden besteht nur in der Parameterliste.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage