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);
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,[]);
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();
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); }
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]);
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']);
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.