call und apply sind beide vorhanden, um den Kontext zu ändern, wenn eine Funktion ausgeführt wird der Zeiger davon innerhalb des Funktionskörpers .
call und applyhaben genau die gleiche Funktion, aber die Art und Weise, wie sie Parameter akzeptieren, ist unterschiedlich.
Methodendefinitionapply
Die Methode Function.apply(obj,args) kann zwei Parameter empfangen:
Dieses Objekt ersetzt dieses Objekt in der Function-Klasse
Dies ist ein Array oder arrayähnlich, und die apply-Methode übernimmt das Elemente in dieser Sammlung werden als Parameter an die aufgerufene Funktion übergeben.
call ist derselbe wie der erste Parameter der Apply-Methode , außer Der zweite Parameter ist eine Parameterliste
Wenn im nicht strengen Modus der erste Parameter als Null oder undefiniert übergeben wird, verweist dieser im Funktionskörper auf das Standard-Hostobjekt. im Browser Es ist die Methode zum „Entführen“ anderer
Zu diesem Zeitpunkt wird die
logName
var test = function(){ console.log(this===window); } test.apply(null);//true test.call(undefined);//true
durch bar referenziert , und dies zeigt auf
bar
Implementierung der Vererbung
In der tatsächlichen Entwicklung stoßen wir häufig auf Szenarien, in denen dieser Zeiger versehentlich geändert wird. hat eine lokale
fun
var foo = { name:"mingming", logName:function(){ console.log(this.name); } } var bar={ name:"xiaowang" }; foo.logName.call(bar);//xiaowang
als normale Funktion aufgerufen wird, zeigt funs internes
this
window
, aber wir möchten oft, dass es auf den Knoten
function Animal(name){ this.name = name; this.showName = function(){ console.log(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName(); //Black Cat
Verwendung anrufen, bewerbenWir können dieses Problem ganz einfach lösenNatürlich können Sie das auch tun, aber in
strikter
-Modus, in diesem Fall wurde festgelegt, dass er nicht auf das globale Objekt zeigt, sondern
window.id="window"; document.querySelector('#test').onclick = function(){ console.log(this.id);//test var fun = function(){ console.log(this.id); } fun();//window }
window.id="window"; document.querySelector('#test').onclick = function(){ console.log(this.id);//test var fun = function(){ console.log(this.id); } fun.call(this);//test }
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Anwendungs- und Aufrufverwendungsbeispiele von Javascript zum Ändern des internen Punkts des Funktionskörpers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!