2013-10-31 16 views
6

Ist es möglich, eine Variable durch Verketten von zwei Strings zusammen, um den Namen zu bilden?Javascript - setzen Sie eine Variable mit Verkettung von Strings

Wenn überhaupt möglich, möchte ich bestimmen, welche Variable basierend auf den Klassennamen der Objekte, die der Benutzer klickt, festgelegt werden. Ich weiß, dass ich eine Reihe von if/else if-Anweisungen fest codieren kann, aber es wäre wirklich cool, wenn ich die Variablen indirekt referenzieren könnte. Ich dachte etwas in der Art:

var owner_read; 
var group_read; 

function setVariableIndirectly(object){ 
    var second = object.className; // returns "read" 
    var first = object.parentElement.className; // returns "group" 

    first + "_" + second = "set this as the new variable"; 
} 

Gibt es eine Möglichkeit, dies zu tun ??

EDIT:

Hier ist der HTML-Code, die Daten kommen in aus.

+0

Es gibt keine * Variablen * mit "dynamischen Namen" in JavaScript (ausgenommen 'eval' und' neue Funktion' shenanigans); Was es gibt, sind * Eigenschaften * (von Objekten) mit "dynamischen Namen". Ich würde vermeiden, "Fenster" als einen solchen Container zu verwenden, um Zusammenstöße zu vermeiden (und Sie * werde * diese finden!) Und "globale Verschmutzung" zu mildern, sondern stattdessen die Eigenschaften einiger [interner] Objekte zu verwenden. – user2864740

Antwort

6

Es ist nicht genau klar, was Sie erreichen möchten, aber Sie können Variablen per Name als Eigenschaften eines Objekts zugreifen.

// this is the container to hold your named variables 
// (which will be properties of this object) 
var container = {}; 

function setVariableIndirectly(obj){ 
    var second = obj.className; // returns "read" 
    var first = obj.parentNode.className; // returns "group" 

    // this is how you access a property of an object 
    // using a string as the property name  
    container[first + "_" + second] = "set this as the new variable"; 

    // in your example container["read_group"] would now be set 
} 

Es ist wahrscheinlich besser Ihre Variablen auf Ihrem eigenen Container-Objekt zu setzen, wie oben gezeigt, aber Sie können auch globale Variablen über Eigenschaften auf dem window Objekt zuzugreifen.

+0

Perfekt !! Entschuldigung, wenn ich in der Beschreibung nicht klar war. Ich werde meinen ursprünglichen Beitrag bearbeiten, der HTML-Code macht es ein wenig klarer. –

+0

@ChrisSchmitz - FYI, du willst wahrscheinlich ein Attribut wie 'data-permissiontype =" read "' Attribut anstelle von 'class =" read "verwenden, weil du, wie auch immer du es hast, keine anderen Klassen zum Stylen verwenden kannst Zwecke. – jfriend00

+0

Ah, sehr guter Punkt. Danke noch einmal! –

1

Sie können eine globale Variable auf diese Weise festgelegt:

window[first + "_" + second] = "set this as the new variable"; 

und den Zugang als:

console.log(group_read); 
+0

Ich empfehle nicht, 'window [..]' als Demonstration wegen seiner inhärenten Nebenwirkungen zu verwenden.Sobald die Eigenschaften verstanden sind - und das "Fenster" nur ein Objekt ist und wie JavaScript die Identifikatoren auflöst - der Rest passt einfach zusammen. – user2864740

9

Dies ist möglich, aber man muss vorsichtig Kontext und Umfang sein.

1. Um Variable mit globalem Bereich in Browser-Umgebung gesetzt:

global[str1 + str2] = value 

3. Innerhalb:

window[str1 + str2] = value 

2. Um Variable mit globalem Bereich in Knotenumgebung ein Verschluss und Bereich innerhalb dieses Verschlusses:

this[str1 + str2] = value 

Innerhalb der Schließung, global und Fenster wird immer noch die globale. Beachten Sie, dass "dies" sich auf ein anderes Objekt beziehen kann, wenn Sie sich innerhalb einer aufgerufenen Funktion befinden.

+0

Was ist mit einer lokalen Variable oder einem Parameter für eine Funktion? – Michael