Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Funktionen von Call- und Apply-Schlüsselwörtern in js

Detaillierte Erläuterung der Funktionen von Call- und Apply-Schlüsselwörtern in js

高洛峰
高洛峰Original
2016-12-06 11:05:45851Durchsuche

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());


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