Ist es in Javascript möglich, einem lokalen Variablen einen Alias / Verweis zuzuweisen?
Ich meine etwas C-ähnliches:
function foo() {
var x = 1;
var y = &x;
y++;
alert(x); // prints 2
}
= EDIT =
Ist es möglich, in diesem Code Aliasargumente.callee zu verwenden?:
function foo() {
arguments.callee.myStaticVar = arguments.callee.myStaticVar || 0;
arguments.callee.myStaticVar++;
return arguments.callee.myStaticVar;
}
javascript
gpilotino
quelle
quelle
Antworten:
In JavaScript werden primitive Typen wie Ganzzahlen und Zeichenfolgen als Wert übergeben, während Objekte als Referenz übergeben werden. Um dies zu erreichen, müssen Sie ein Objekt verwenden:
quelle
Bis zu einem gewissen Grad ist dies möglich. Sie können einen Alias für eine Variable mithilfe von Abschlüssen erstellen:
quelle
alert(y)
ist sie tatsächlich richtig. Obwohl die Neudefinition von Funktionsprototypmethoden ein sehr schlechter Stil ist. Aber hey, es funktioniert!Ob Sie einen Alias erstellen können, hängt vom Datentyp ab. Objekte, Arrays und Funktionen werden als Referenz behandelt, und Aliasing ist möglich. Andere Typen sind im Wesentlichen atomar, und die Variable speichert den Wert und nicht einen Verweis auf einen Wert.
argumente.callee ist eine Funktion, daher können Sie einen Verweis darauf haben und das gemeinsam genutzte Objekt ändern.
Beachten Sie, dass , wenn in dem obigen Code , den Sie sagen , sind
self = function() {return 42;};
dannself
dann zu einem beziehen würde anderes Objekt alsarguments.callee
, die ein Bezugspunkt bleibtfoo
. Wenn Sie ein zusammengesetztes Objekt haben, ersetzt der Zuweisungsoperator die Referenz und ändert das referenzierte Objekt nicht. Mit Ordnungswerte, ein Fall wiey++
entsprichty = y + 1
, die eine ‚neue‘ Ganzzahl auf die Variable zuweist.quelle
arguments.callee
bereits einen Alias gibt, der der Name der Funktion ist. In diesem Beispiel könnten Sie nur verwendenfoo.myStaticVar
(vielleicht war dies 2009 nicht der Fall?)Bearbeiten Sie meine vorherige Antwort: Wenn Sie die Aufrufe einer Funktion zählen möchten, möchten Sie möglicherweise Folgendes versuchen:
Hier dient c als Zähler, und Sie müssen keine Argumente verwenden.
quelle
countMe = function f(){ return ++f.c || (f.c = 1); }
Wenn Sie den Beitrag von user187291 erweitern , können Sie auch Getter / Setter verwenden, um die Verwendung von Funktionen zu umgehen .
quelle
2019 muss ich minimierte jquery-Plugins schreiben, damit ich auch diesen Alias benötige. Beim Testen dieser und anderer Beispiele aus anderen Quellen habe ich einen Weg gefunden, ohne Kopie im Speicher des gesamten Objekts, aber nur eine Referenz zu erstellen. Ich habe dies bereits mit Firefox getestet und zuvor den Tab-Speicher des Task-Managers auf Firefox beobachtet. Der Code lautet:
quelle