Heim > Artikel > Web-Frontend > Detaillierte Erläuterung der Funktionen von Call- und Apply-Schlüsselwörtern in js
Die Rolle von Javascript-Aufrufen und Anwenden von Schlüsselwörtern
Anwenden akzeptiert zwei Parameter. Der erste Parameter gibt den Zeiger auf dieses Objekt im Funktionskörper an, und der zweite Parameter ist eine Sammlung mit Indizes.
Aufruf ist syntaktischer Zucker für „Anwenden“. Wenn die Anzahl der Parameter festgelegt ist, können Sie den zweiten Parameter übergeben, ohne den Satz zu subskribieren.
var func = function(a,b,c) { alert(a + b + c); } func.apply(null,[1,2,3]);//弹出6 func.call(null,1,2,3);//弹出6
Wenn der erste in Apply und Call übergebene Parameter null ist, zeigt dieser im Funktionskörper auf window.
Wenn der erste Parameter, der in apply und call übergeben wird, null ist, zeigt dieser im Funktionskörper auf window.
Verwendung von „Anruf“ und „Anwenden“
1. Ändern Sie die Richtung davon
var obj1 = { name = '刘备' } var obj2 = { name = '曹操' } var getName = function(){ alert(this.name); } window.name = '三国'; getName();//弹出"三国" getName.call(obj1);//弹出"刘备" getName.call(obj2);//弹出"曹操"
Also, wenn in einigen Situationen Nachdem sich der Punkt aus unerklärlichen Gründen geändert hat, können Sie call oder apply verwenden, um den Punkt zu korrigieren.
document.getElementById('div1').onclick = function(){ alert(this.id);//div1 var fun1 = function(){ alert(this.id);//window.id 即undefined } fun1();//普通函数的方式调用,this指代window,相当于window.id 即 undefined }
Da es im obigen Beispiel als normale Funktion aufgerufen wird, ist daraus „Fenster“ geworden. Sehen wir uns an, wie Sie mit call Korrekturen vornehmen können.
document.getElementById('div1').onclick = function(){ alert(this.id); var fun1 = function(){ alert(this.id); } fun1.call(this);//强制函数内的this为外层的this, }
2. Aufrufen von Funktionen anderer Objekte
Beispiel 1:
var obj1 = { a:1, b:2, add:function() { return this.a + this.b; } } var obj2 = { a:1, b:2, } var result = obj1.add.call(obj2);//用obj1的函数来计算obj2的两个属性的和 alert(result);//输出3
Beispiel 2: Ausleihen von Konstruktoren, um vererbungsähnliche Effekte zu erzielen
var A = function(name) { this.name = name; }; var B = function(){ A.apply(this,arguments) } B.prototype.getName = function(){ return this.name; } var b = new B('刘备'); alert(b.getName());