JavaScript-Funktionsaufrufe sind in 4 Modi unterteilt:
1. Methodenaufrufmodus: Das heißt, das Objekt enthält Methodenattribute, Obj.methodName() oder Obj[methodName]().
2. Funktionsaufrufmodus: methodName().
3. Konstruktor-Aufrufmodus: new MethodName().
4. Aufrufmodi anwenden und aufrufen: ObjA.apply(ObjB,args[]) oder ObjA.call(ObjB,arg1,arg2...).
Wenn eine Funktion aufgerufen wird, erhält sie zusätzlich zu den formalen Parametern auch diese und Argumente. Darunter ist dies der Funktionsobjektkontext und Argumente sind die tatsächlichen Parameter.
Anwenden und Aufrufen implementieren dieselbe Funktion, dh den Kontext des Funktionsobjekts wechseln (die Referenz, auf die dies verweist). Der Unterschied besteht darin, dass die formalen Parameter unterschiedlich sind. apply sind Argumente oder ein Array, call sind mehrere einzelne formale Parameter, die durch Kommas getrennt sind.
function add(c) { alert(this.a+this.b+c); } var test={a:1,b:2} add.call(test,3);
Vor der Ausführung von add.call(test,3); gehören sowohl add als auch test zum Fenster, und dies zeigt zu diesem Zeitpunkt auf das Fenster. add.call(test,3); Geben Sie beim Ausführen den Add-Methodenkörper ein. Zu diesem Zeitpunkt wird dies von window auf test umgestellt. und c werden als formale Parameter übergeben. Der Wert von warning() ist 1 2 3=6. apply hat auch die gleiche Funktion.
Verlängerung und Vererbung durch Antrag und Anruf:
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函数体的this由window切换为Cat{}, // Animal函数体的this.name通过形式参数传入即为Black Cat,最终cat //得到的结果为cat=Cat{name:"Black Cat",showName: function(){ alert(this.name);}, cat.showName();//执行时this由window切换为 //Cat{name:"Black Cat",showName: function(){ alert(this.name);} 此时this.name //为this.name=Cat.name,因此为Black Cat。