Bevor Sie sich auf das obige Konzept beziehen, möchten Sie zunächst über die verborgenen Parameter der Funktion in der Funktion in JavaScript: Argumente sprechen
Argumente
Dieses Objekt repräsentiert die Parameter der ausgeführten Funktion und ruft seine Funktion auf.
[Funktion.] Argumente [n]
Parameterfunktion: Optionen. Der Name des Funktionsobjekts wird derzeit ausgeführt. N: Optionen. Um den Parameterwertindex von 0 an das Funktionsobjekt zu übergeben.
veranschaulichen
Argumente sind ein verstecktes Objekt, das zusätzlich zu den angegebenen Parametern erstellt wurde, wenn die Funktion aufruft. 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 eines Objekts Objekt.
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 += "/n/n"
Für (i = 0; i <numargs; i ++) {// den Parameterinhalt abrufen.
s + = "arg" + i + "=" + arguments [i] + "/n";
}
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.
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 den Kompiliertext der Funktion.
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
Der optionale Funktionsparameter ist der Name des derzeit ausgeführten Funktionsobjekts.
veranschaulichen
Der Anfangswert des Callee -Attributs ist das Funktionsobjekt, 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 0;
anders
Return n + argumente.callee (n -1)
}
Allgemeinere Rekursionsfunktionen:
Kopieren Sie den Code -Code wie folgt:
var sum = function (n) {
if (n <= 0)
Rückkehr 0;
anders
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, all dieser Zeiger in der Funktion wird ThisArg zugeordnet, was den Zweck des Ausführens der Funktion als ein anderes Objekt erreichen kann.
Beschreibung von Apply
Wenn Argarray kein effektives Array ist oder kein Argumenteobjekt ist, wird es einen Typerror verursachen.
Ohne Parameter von Argarrray und Thisarg wird das globale Objekt als Thisarg verwendet,
Und kann keine Parameter übergeben werden.
Rufen Sie die Beschreibung an
Die Aufrufmethode kann den Kontext eines Objekts einer Funktion vom Anfangskontext in ein von ThisARG festgelegter neuer Objekt ändern.
Wenn nicht die Parameter von ThisArg bereitgestellt wird, wird das globale Objekt als isarg verwendet
Verwandte Fähigkeiten:
Es gibt eine andere Technik in der Anwendung von Anruf und Anwendung, dh nach Verwendung einer anderen Funktion (Klasse) mit Aufruf und Anwendung hat die aktuelle Funktion (Klasse) eine andere Methode (Klasse) Methode oder Attribut. "Nachlass". 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 definiertes Modell im JavaScript -Framework -Propro zu erstellen.
Tatsächlich lautet der aktuelle Code wie folgt:
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 Sie den Klassenerstellungsmodus im Prototyp implementieren
Beispiel:
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 = new vene ("moto");
Moto.Showself ();