Ich möchte den Wert einer Variablen verwenden, um auf ein Objekt zuzugreifen.
Angenommen, ich habe ein Objekt namens myobject.
Ich möchte eine Variable mit diesem Namen füllen und die Variable verwenden, um auf das Objekt zuzugreifen.
Beispiel:
var objname = 'myobject';
{objname}.value = 'value';
javascript
PeeHaa
quelle
quelle
alert(this === window)
.window
Objekt aufgerufen ,objname
die dann über verwiesen wirdthis
... Sie ersetzen könntewindow
fürthis
im zweiten Beispiel , und alles würde immer noch funktionieren. :-)arguments.callee
ist veraltet, aber dennoch eine sehr clevere Implementierung - und verschmutzt nicht den globalen Geltungsbereich. +1objname
eine Eigenschaft der Funktion selbst. Es kann für rekursive Funktionen fehlschlagen. Ich bin mir nicht sicher, wie dies in der realen Welt verwendet werden kann.Verwenden Sie eine eckige Klammer um den Variablennamen.
quelle
Ist es eine globale Variable? Wenn ja, sind diese tatsächlich Teil des
window
Objekts, sodass Sie dies tun könnenwindow[objname].value
.Wenn es sich um eine lokale Funktion handelt, gibt es meines Erachtens keinen guten Weg, um das zu tun, was Sie wollen.
quelle
Das Objekt ist in einem bestimmten Bereich vorhanden, sodass Sie fast immer über diese Syntax auf die Variable zugreifen können:
Der einzige Ort, an dem dies schwierig wird, ist, wenn Sie sich in einem geschlossenen Bereich befinden und Zugriff auf eine lokale Variable der obersten Ebene wünschen. Wenn Sie so etwas haben:
Sie können dies umgehen, indem Sie
eval
stattdessen auf die aktuelle Bereichskette zugreifen ... aber ich empfehle es nicht, es sei denn, Sie haben viele Tests durchgeführt und wissen , dass dies der beste Weg ist, um Dinge zu erledigen .Ihre beste Wette ist , einen Verweis auf einen Namen haben , in einem immer-going-to-be-es - Objekt (wie
this
im globalen Bereich oder ein privates Top-Level - Variable in einem lokalen Bereich) und setzte alles anderes drin.So:
quelle
Sie könnten verwenden
eval
:quelle
eval
berücksichtigtevil
? Wenn nicht, könnte ich es benutzen. Weil es momentan global ist, aber ich wollte es in eine Funktion verschieben, um Sachen aufzuräumen.eval
kann.eval
meiner Meinung nach eine der wenigen legitimen Verwendungen von . Wir müssen jedoch sicherstellen, dass die Variable sauber ist.myVar[objname].value
?Sie können dies im Allgemeinen nicht tun, außer im Fensterbereich, in dem Sie schreiben können
window[objname].value = 'value';
quelle
Ich denke, Shaz 'Antwort für lokale Variablen ist schwer zu verstehen, obwohl sie für nicht rekursive Funktionen funktioniert. Hier ist ein anderer Weg, den ich für klarer halte (aber es ist immer noch seine Idee, genau dasselbe Verhalten). Es wird auch nicht dynamisch auf die lokalen Variablen zugegriffen, sondern nur auf die Eigenschaft der lokalen Variablen.
Im Wesentlichen wird eine globale Variable verwendet (die an das Funktionsobjekt angehängt ist).
Dies entspricht im Wesentlichen dem Erstellen einer globalen Datei zum Speichern der Variablen, sodass Sie als Eigenschaft darauf zugreifen können. Ein Global zu erstellen, um dies zu tun, ist so ein Hack.
Hier ist ein sauberer Hack, der keine globalen Variablen erstellt, sondern stattdessen eine lokale Variable verwendet.
Siehe Javascript: Zeichenfolge als Objektreferenz interpretieren?
quelle
Stellen Sie bei Verwendung des Fensters [Objektname] sicher, dass es sich bei dem Objektnamen um globale Variablen handelt. Andernfalls wird irgendwann funktionieren und manchmal fehlschlagen. window [objname] .value.
quelle
Wenn sich das Objekt in einem Namespace befindet, z.
Company.Module.Components.Foo
Sie können diese Funktion verwenden:CoffeeScript:
Resultierte Js:
Dann können Sie ein neues Objekt erstellen oder was auch immer tun. Beachten Sie die Eltern durch.
Diese Idee stammt aus einer ähnlichen Frage: Wie man eine JavaScript-Funktion ausführt, wenn ich ihren Namen als Zeichenfolge habe
quelle
Eine der Herausforderungen, die ich mit den Antworten hatte, war die Annahme, dass das Objekt eine einzelne Ebene war. Beispielsweise,
funktioniert gut, aber
funktioniert nicht.
Am Ende habe ich eine Funktion für den Zugriff auf mehrstufige Objekte erstellt:
Im zweiten Szenario kann ich dann die Zeichenfolge an diese Funktion übergeben, um das gesuchte Objekt zurückzugewinnen:
quelle
Sie können eine Objekteigenschaft folgendermaßen festlegen:
quelle
Wenn Sie die Liste der möglichen Variablennamen bereits kennen, erstellen Sie ein neues Objekt (iconObj), dessen Eigenschaftsname mit den Objektnamen identisch ist. Im folgenden Beispiel enthält die Variable iconLib zwei Zeichenfolgenwerte, entweder 'ZondIcons' oder 'MaterialIcons'. . propertyName ist die Eigenschaft von ZondIcons oder MaterialsIcon.
quelle
-> [etwas: {etwasElse: 'test'}];
quelle
quelle