2011-07-18 10 views
15

Jestem nowym obiektem javascript. Mam zmienną, której wartość chciałbym użyć do wywołania metody obiektu. tak ..Wywołanie metody obiektu javascript ze zmienną

var foo = { 
    bar: function() {}, 
    barr: function() {} 
} 

teraz jest zmienna, której wartość może być każdy z nazwiskami dwóch metoda jest bar i barr chcę, aby połączyć je z czymś jak

var myvar = 'bar'; 
foo.{myVar}(); 
+0

Jeśli zaczynasz uczyć się JavaScript, może to być fajny artykuł do przeczytania: John Resig's [Learning Advanced Javascript ] (http://ejohn.org/apps/learn/). Wiem, że mówi "zaawansowane", ale zaczyna się od podstawowych przykładów i ma ładny interaktywny interfejs do modyfikowania i uruchamiania kodu. – Groo

+0

@Groo hej! wielkie dzięki! jestem nowy w przedmiocie obiektowym i TBH, są trochę mylące ..: O ale ja na tym jestem: D – Achshar

Odpowiedz

32

Więc zakładam chcesz aby wywołać odpowiednią funkcję dynamicznie w oparciu o ciąg znaków. Można zrobić coś takiego:

var myVar = 'bar'; 
foo[myVar](); 

Albo można też użyć eval ale jest to bardziej ryzykowne (podatne na atak wtrysku) i wolniej (nie ten zrobić: P):

var myVar = 'bar'; 
eval('foo.' + myVar + '()'); 
+0

dzięki .. jest tak wiele odpowiedzi: O wygląda tak, jakbym zadał pytanie n00b: P ale hej dziękuje każdemu ciału:) – Achshar

+2

Nie bój się, jeśli czegoś się nauczyłeś :) –

+0

Nie ma pytania n00b z wyjątkiem tego, na który właśnie odpowiedziałeś :) – pixelfreak

9

Ponieważ można uzyskać dostęp do elementów obiektu za pomocą notacji indeksu, co następuje zrobi to, czego szukasz:

var myVar = 'bar'; 
foo[myVar](); 
6

można po prostu powiedzieć:

foo[myVar](); 

Od foo jest obiektem JavaScript, kod ten będzie odwoływać człon nazwy zawartej w zmiennej myVar.

3

użyć coś jak: foo[myVar]();

+0

wywoływanie wewnątrz metod obiektu w ten sposób nie działa. używając polecenia try/catch komunikat "this [myVar] nie jest funkcją" – Scott

-1

Jestem pewien, że istnieje lepszy sposób, ale można użyć eval():

var myvar = "bar"; 
var code = "foo." + myvar + "();" 
eval(code); 
+0

Nie używaj eval to jest złe –

3

powinno być coś takiego

foo[myvar](); 
4
var foo = { 
    bar: function() { alert('bar'); }, 
    barr: function() { alert('barr'); } 
} 


var myvar = 'bar'; 
foo[myvar](); // alert 'bar' 
Powiązane problemy