Schauen wir uns zunächst die offizielle Erklärung zu Call () an, "eine Methode eines Objekts aufrufen und das aktuelle Objekt durch ein anderes Objekt ersetzen". Nachdem Sie diese Erklärung gelesen haben, sind Sie möglicherweise noch verwirrter. Siehe Beispiel:
Die Codekopie lautet wie folgt:
var x = "Ich bin eine globale Variable"; // Globale Variable x definieren x
Funktion a () {// Funktionsklassenstruktur a definieren
this.x = "Ich habe es in Funktionsklassenstruktur a" deklariert;
}
// eine normale Funktion definieren und den Wert der im aktuellen Zeiger enthaltenen Variablen x aufstellen.
Funktion f () {
alarm (this.x);
}
// Der Rückgabewert lautet "Ich habe in Funktionsklassenstruktur a deklariert" "
f.call (neu a ());
Mein Verständnis ist, dass F.Call (neu A ()) die Funktion (eigentlich ein Objekt) F zum analysierten Objekt "New a ()" zum Parsen kopieren soll. Tatsächlich ist es das gleiche wie das Parsing -Ergebnis des folgenden Code:
Die Codekopie lautet wie folgt:
Funktion a () {
this.x = "Ich habe es in Funktionsklassenstruktur a" deklariert;
alarm (this.x);
}
A();
Es ist nur so, dass der Umfang der Variablen x zu diesem Zeitpunkt anders ist. Ja ... es scheint ein bisschen Vererbung zu haben, nicht wahr? Im obigen Beispiel wird F durch das Festigkeitsobjekt des Konstruktors a vollständig vererbt. Wenn dies nicht ausreicht, um zu zeigen, dass A.Call (b) ein Vererbungsmodus ist, schauen wir uns eine bessere Verbrauchsnutzung an.
Die Codekopie lautet wie folgt:
Funktion f () {
this.a = "a";
this.b = function () {
Alert ("B");
}
}
Funktion e () {
f.call (this);
}
var c = new e ();
Alarm (ca); // popt a
CB (); // popt b
In diesem Beispiel können Freunde, die wissen, wie man den Browser benutzt, sehen, dass E die Eigenschaften und Methoden von F vollständig erbt, sonst wird es nicht erklärt, da die Attribute A und B in E nicht definiert sind. Nach gesunden Menschenverstand werden diese beiden Eigenschaften im Instanzobjekt c von e nicht erscheinen.