Heim  >  Artikel  >  Web-Frontend  >  So experimentieren Sie herum: Call- und Apply_Javascript-Techniken

So experimentieren Sie herum: Call- und Apply_Javascript-Techniken

WBOY
WBOYOriginal
2016-05-16 16:49:041145Durchsuche

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:

Code kopieren Der Code lautet wie folgt:

Funktion Introduce(name,age)
{
Document.write("Mein Name ist " name ".Ich bin " age);
var p=new People(
Introduce.call(p,"Windking" ,20) ;

Lassen Sie uns über den obigen Code sprechen. Nach der Verwendung von call wird Introduce zur Methode von p. Bei Verwendung der Aufrufmethode entspricht der obige Code diesem Code:

Code kopieren Der Code lautet wie folgt:
Funktion Personen (Name, Alter)
{
this.name=name;
this.age=age;
this.Introduce=function(){
document.write("Mein Name ist " name ". Ich bin " age );
};
}

Verstehen Sie die Bedeutung? apply hat den gleichen Effekt.

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 Der Code lautet wie folgt:
Funktion Introduce(name,age)
{
         document.write("Mein Name ist " name ".Ich bin " age);
Dies ist eine Selbsteinführungsmethode. Nehmen wir nun an, wir haben eine Jungenklasse und eine Mädchenklasse (ich bin nur zur Demonstration hier, in der Praxis werde ich eine People-Elternklasse verwenden), weil sie alle gleich sind , damit wir diese Methode teilen können.

Code kopieren

Der Code lautet wie folgt:function Boy() { this .BoyIntroduce=function(){
Introduce.call(this,name,age);
}



Dasselbe gilt auch für Girl. In diesem Fall können wir das Schreiben von Code vermeiden. Tatsächlich ist das etwas weit hergeholt, denn wir können es auch so schreiben:


Code kopieren

Der Code lautet wie folgt:function Boy() { this .BoyIntroduce=function(){      Introduce(name,age);
}
}



Aber zu diesem Zeitpunkt sieht es viel einfacher aus, wenn wir Apply verwenden:


Code kopieren

Der Code lautet wie folgt:function Boy() { this .BoyIntroduce=function(){ Introduce.apply(this,arguments);
}

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):

Code kopieren Der Code lautet wie folgt:

Funktion Junge (Name, Alter)
{
this.BoyIntroduce=function(){
document.write("Mein Name ist " name ".Ich bin " age);
}
function Girl(name, Alter)
{

}

Dies ist eine Jungen- und eine Mädchenklasse, und dann schreiben wir den folgenden Code:

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.

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