Heim >Web-Frontend >js-Tutorial >JavaScript-Lerntipps: Der Unterschied zwischen Call und Apply

JavaScript-Lerntipps: Der Unterschied zwischen Call und Apply

高洛峰
高洛峰Original
2017-01-12 11:35:021482Durchsuche

1. Aufruf
Methode aufrufen
Eine Methode eines Objekts aufrufen, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Parameter
thisObj
Optional. Das Objekt, das als aktuelles Objekt verwendet wird.
arg1, arg2, , argN
Optional. Es wird eine Folge von Methodenparametern übergeben.
Beschreibung
Mit der Aufrufmethode 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.
Einfaches Beispiel (Funktionsaufruf):

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

Was dieses Beispiel bedeutet, ist, sub durch add zu ersetzen, add.call(sub,3,1) == add(3,1) , also Das laufende Ergebnis ist: Alert(4); Ein komplizierteres Beispiel (Methodenaufruf):

function Class1() 
{ 
this.name = "class1"; 
this.showNam = function() 
{ 
alert(this.name); 
} 
} 
function Class2() 
{ 
this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 
c1.showNam.call(c2);

Beachten Sie, dass dieser Aufruf bedeutet, die Methode von c1 zur Ausführung auf c2 zu setzen. Es stellt sich heraus, dass c2 dies nicht tut Habe die showNam.()-Methode, setze nun die showNam()-Methode von c1 zur Ausführung, also sollte this.name Klasse2 sein und das Ergebnis der Ausführung ist: Warnung ("Klasse2"); >

Auf diese Weise erbt Klasse2 Klasse1.call(this) bedeutet, dass Klasse2 nicht alle Eigenschaften und Methoden von Klasse1 hat Die Methoden von Klasse1. Und das Ausführungsergebnis ist: Warnung ("cc") Ja, das ist es, wie JavaScript die Vererbung objektorientiert simuliert und auch Mehrfachvererbung implementieren kann.
function Class1() 
{ 
this.showTxt = function(txt) 
{ 
alert(txt); 
} 
} 
function Class2() 
{ 
Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");

Mehrfachvererbung


Es ist ganz einfach: Verwenden Sie einfach zwei Aufrufe, um eine Mehrfachvererbung zu erreichen.

Natürlich gibt es auch andere Möglichkeiten, js zu erben, z. B. die Verwendung der Prototypenkette. Dies ist nicht der Zweck dieses Artikels, die Verwendung von „call“ zu erläutern. Diese beiden Methoden bedeuten im Grunde dasselbe call kann von beliebigem Typ sein und apply Der zweite Parameter muss ein Array sein
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); 
}

2. apply

hat die gleiche Funktion für apply und call, es gibt jedoch Unterschiede in den Parametern zwischen den beiden.
Die Bedeutung des ersten Parameters ist dieselbe, aber für den zweiten Parameter:
Anwenden von Durchgängen in einem Parameterarray, d. h. mehrere Parameter werden in einem Array zusammengefasst und übergeben, und der Aufruf wird als Aufruf verwendet. Parameter werden übergeben (beginnend mit dem zweiten Parameter).
Die entsprechende Apply-Schreibmethode von func.call(func1,var1,var2,var3) lautet beispielsweise: func.apply(func1,[var1,var2,var3])

Tipps (der Code ist elegant und seine Ausführungseffizienz hoch)


Weitere JavaScript-Lerntipps zu den Unterschieden zwischen Aufruf und Anwendung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
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