Bevor Sie sich auf das obige Konzept beziehen, möchten Sie zunächst über die verborgenen Parameter der Funktion in der Funktion in JavaScript sprechen:
Argumente
Argumente repräsentieren die Parameter, die ausgeführt werden, und die Funktion des Aufrufens seiner Funktion. [Funktion.] Argumente [n] Parameter
Funktion: Optionen. Der Name des Funktionsobjekts wird derzeit ausgeführt.
N: Optionen. Um den Parameterwertindex von 0 an das Funktionsobjekt zu übergeben. Es zeigt, dass Argumen ein verstecktes Objekt ist, das zusätzlich zum angegebenen Parameter erstellt wurde, wenn die Funktion aufgerufen wird. Argumente sind ein ähnliches Objekt wie ein Array, aber kein Array. hat die Array -Länge -Attributlänge. Es gibt auch den Parameter, dass das Argumenteobjekt die Funktion speichert, die tatsächlich an die Funktion übergeben wird, nicht auf die von der funktionale Anweisung definierte Parameterliste beschränkt und nicht explizit erstellt werden kann, um ein Argumenteobjekt zu erstellen. Das Argumenteobjekt kann nur zu Beginn der Funktion verfügbar sein.
Das folgende Beispiel erläutert diese Eigenschaften im Detail
Kopieren Sie den Code -Code wie folgt:
// Die Verwendung des Argumenteobjekts
Funktion argtest (a, b) {{{{
var i, s = "Die erwartete Argtest -Funktion";
var numargs = Argumente.Length;
Var expargs = argTest.length;
if (expargs <2)
s + = expargs + "argument.";
anders
s + = expargs + "Argumente" ;;
if (numargs <2)
s + = numargs + "wurde bestanden.";
anders
s + = numargs + "Wir haben bestanden.";
s += ""
Für (i = 0; i <numargs; i ++) {// den Parameterinhalt abrufen.
s + = "arg" + i + "=" + Argumente + "" "";
}
Rückgabe (s); // Rückgabe der Parameterliste.
}
Hier ist ein Code, der erklärt, dass Argumente kein Array (Array -Klasse) sind:
Kopieren Sie den Code -Code wie folgt:
Array.Prototype.setValue = 1;
Alert (New Array (). SelfValue);
Funktionstests () {
Alarm (argumente.selfValue);
}
Sie finden die erste Warnungsanzeige 1, was bedeutet, dass das Array -Objekt das Selbstvalue -Attribut mit einem Wert von 1. hat. Wenn Sie die Funktionstestagumens aufrufen, werden Sie feststellen ist das Attribut von Argumenten, dh Argumente sind kein Array -Objekt.
Fügen Sie hier eine einfache Methode hinzu, die Sie hinzufügen können: Alarm (Argumente Instanz des Arrays);
ALERT (Argumente Instanz des Objekts);
Anrufer
Gibt einen Verweis auf die Funktion zurück, die die aktuelle Funktion aufruft.
FunktionName.caller
Das Funktionsname -Objekt ist der Name der Ausführungsfunktion.
veranschaulichen
Für Funktionen wird das Anruferattribut nur definiert, wenn die Funktion ausgeführt wird. Wenn die Funktion von der oberen Ebene aufgerufen wird, enthält der Anrufer NULL. Wenn das Anruferattribut im Kontext der Zeichenfolge verwendet wird, ist das Ergebnis das gleiche wie bei der FunktionName.tstring, dh zeigt es, dass die Funktion der Funktion angezeigt wird.
Hinweis: Funktion.ToString () kann die Anti -Compilation -Funktion der Funktion realisieren.
Das folgende Beispiel zeigt die Verwendung des Anruferattributs:
Kopieren Sie den Code -Code wie folgt:
// Caller Demo {
Funktion CallDemo () {
if (callerDemo.caller) {
var a = callerDemo.caller.toString ();
Alarm (a);
} Anders {
Alarm ("Dies ist eine Top -Funktion");
}
}
Funktion HandleCaller () {
CallerDemo ();
}
Callee
Gibt den Text des Funktionsobjekts zurück, das ausgeführt wird, den Text des angegebenen Funktionsobjekts. [Funktion.] Argumente.Callee Optionaler Parameter ist der Name des derzeit ausgeführten Funktionsobjekts. Erklären Sie, dass der Anfangswert des Callee -Attributs das Funktionsobjekt ist, das ausgeführt wird. Das Callee -Attribut ist ein Mitglied des Argumenteobjekts, das den Verweis auf das Funktionsobjekt selbst angibt, das der Rekursivität der anonymen Funktion oder der Verpackung der Funktion förderlich ist. Dieses Attribut ist nur verfügbar, wenn die Korrelationsfunktion ausgeführt wird. Es ist zu beachten, dass Callee ein Längenattribut hat. Argumente.Length ist eine feste Parameterlänge und Argumente.
Vorbildliches Beispiel
Kopieren Sie den Code -Code wie folgt:
// Callee kann sich drucken
Funktion namensemo () {
Alarm (argumente.callee);
}
// verwendet zur Überprüfung der Parameter
Funktion calleelelengthDemo (arg1, arg2) {{{{{{
if (Argumente.length == Argumente.Callee.length) {
Fenster.Alert ("Überprüfen Sie die Länge von Ginseng und fester Parameter sind korrekt!");
Zurückkehren;
} Anders {
Alert ("Solid Parameter Länge:" +Argumente.Length);
Alert ("" Form permated: +argumente.callee.length);
}
}
// rekursive Berechnung
var sum = function (n) {
if (n <= 0)
Rückkehr 1;
anders
Return n + argumente.callee (n -1)
} Im Vergleich zu allgemeinen rekursiven Funktionen: var sum = function (n) {
if (1 == n) return 1;
Sonst return n + sum (n-1);
}
Zum Zeitpunkt der Anrufe: Alarm (Summe (100));
Unter ihnen enthält die Funktion die Summe selbst.
bewerben und anrufen
Ihre Aufgabe ist es, die Funktion an ein anderes Objekt zu binden.
anwenden (thisArg, argArray);
rufen Sie an (ThisArg [, arg1, arg2 ...]);
Das heißt, dieser dieser Zeiger in allen Funktionen wird ThisArg zugeordnet, was den Zweck der Verwendung der Funktion als eine andere Methodenmethode erkennen kann.
Wenn kein Parameter von Argarray und ThisArg bereitgestellt wird, wird das globale Objekt als ThisArg verwendet und kann keine Parameter übergeben werden. Die Beschreibung des Aufrufs von CALL kann den Kontext eines Objekts einer Funktion aus dem anfänglichen Kontext in ein von ThisARG festgelegter neuer Objekt ändern.
Wenn Sie keinen ThisArg -Parameter angeben, wird das globale Objekt als Thisarg -bezogene Technik verwendet: Nach dem Anwenden von Anrufen und Bewerben befindet sich eine andere Technik nach der Verwendung einer anderen Funktion (Klasse), die aktuelle Funktion (Klassen) hat eine weitere Technik. Die aktuelle Funktion (Klasse).
Schauen Sie sich das folgende Beispiel an:
Kopieren Sie den Code -Code wie folgt:
// erbte Demonstration
Funktion Base () {
this.member = "dnnnsun_member";
this.method = function () {
Window.alert (this.member);
}
}
Funktion Expedition () {) {
Base.call (this);
Fenster.Alert (Mitglied);
Window.alert (this.method);
}
Die obigen Beispiele sind zu erkennen, dass sich nach dem Anruf die Methode und die Attribute der Basis erben können. Verwenden Sie übrigens, um ein Definitionsmodell im JavaScript -Framework -Prototyp zu erstellen.
Kopieren Sie den Code -Code wie folgt:
var class = {
Erstellen: function () {
Return function () {
this.initialize.apply (this, Argumente);
}
}
}
Analyse: Aus dem Code enthält das Objekt nur eine Methode: Erstellen, die eine Funktion zurückgibt, dh Klasse. Dies ist aber auch ein Konstruktor der Klasse, wo die Initialisierung aufgerufen wird, und diese Methode ist die initialisierungsfunktion, die während der Erstellung der Klasse definiert ist. Auf diese Weise können die Beispiele für das Erstellungsmuster im Prototypen implementiert werden:
Kopieren Sie den Code -Code wie folgt:
var vehicle = class.create ();
Vehikel.Prototype = {
initialisieren: Funktion (Typ) {
this.type = Typ;
}
Showself: function () {{)
Alarm ("this is"+ this.type);
}
} Var moto = neues Fahrzeug ("moto");
Moto.Showself ();