In ECMAScript v3 sind diese beiden Methoden für den Funktionsprototyp definiert. Die Funktionen dieser beiden Methoden sind dieselben: Mit diesen beiden Methoden können Sie Funktionen genauso aufrufen wie andere Objektmethoden. Dieser Satz stammt aus dem Buch I Ich habe es oben kopiert, zumindest habe ich nicht verstanden, was es bedeutet.
Das Folgende ist einfach und leicht zu verstehen. Schauen wir uns zuerst den Code an:
Okay, lass uns zunächst über die Grammatik sprechen, unabhängig davon, wie diese Methode in der Praxis angewendet werden kann.
call akzeptiert mindestens einen Parameter. Der erste Parameter von call bezieht sich auf das von Ihnen benötigte Objekt. Im obigen Beispiel hofft die Introduce-Methode, dass sie vom Objekt p aufgerufen werden kann, und verwendet dann p als ersten Parameter der Aufrufparameter. Die verbleibende Anzahl an Parametern ist beliebig und dient als Parameter für die Introduce-Methode. Die Reihenfolge entspricht der Reihenfolge, in der die Introduce-Parameter deklariert werden. Beispiel: Introduce.call(p,"Windking",20). Wenn Introduce eine Instanzmethode von p ist, sieht es so aus: p.Introduce("Windking",20). Verstehst du? Denken Sie daran, dass die Reihenfolge der übergebenen Parameter mit der Reihenfolge übereinstimmen muss, in der die Parameter in der Funktion deklariert werden.
Nachdem man call verstanden hat, ist die apply-Methode leicht zu verstehen. Der einzige Unterschied zwischen apply und call besteht darin, dass call mindestens einen Parameter akzeptiert, während apply nur zwei Parameter akzeptiert Parameter ist ein Parameter mit einer Sammlung von Indizes, zum Beispiel kann Introduce.call(p,"Windking",20) in Introduce.apply(p,["Windking",20]) umgeschrieben werden. Verstehst du dieses Mal?
Wozu dienen diese beiden Methoden? Wenn wir nur die obige Funktion implementieren möchten, wäre es dann nicht besser, Introduce als People-Methode zu implementieren?
Ich fasse den Antrag in zwei Punkte zusammen:
1. Freigabemethode. Schauen wir uns zunächst den Code an:
Code kopieren
Code kopieren
Ist es nicht viel einfacher? Wenn viele Parameter vorhanden sind, ist es nicht erforderlich, eine so dichte Reihe von Parametern zu schreiben!
2. Domainübergreifende Aufrufe
Sehen Sie sich ein einfaches Beispiel an (nur zur Demonstration, kein Wert):
var b=new Boy("Windking",20);
b.BoyIntroduce();
Dagegen gibt es keine Einwände. Angenommen, eines Tages möchte sich ein Mädchen vorstellen und verwendet es nur gelegentlich, dann muss ich die Girl-Klasse nicht ändern, da andere Mädchen schüchtern sind und sich nicht gerne vorstellen. Dann kann ich das zu diesem Zeitpunkt tun.
var g=new Girl("Xuan",22);
Introduce.call(g,"Xuan",22);
3. Der wahre Nutzen – Vererbung
Okay, das Obige ist alles trivial und unraffiniert. Das Folgende ist die am weitesten verbreitete Anwendung von Call and Apply, die für die strukturelle Vererbung verwendet wird.