Szukałem rozwiązań, ale nie mogłem znaleźć żadnej takiej pracy.
Mam zmienną o nazwie onlyVideo
.
"onlyVideo"
ciąg zostaje przekazany do funkcji. Chcę ustawić zmienną onlyVideo
wewnątrz funkcji jako coś. Jak mogę to zrobić?
(Istnieje wiele zmiennych, które można wywoływać w funkcji, więc potrzebuję jej do pracy dynamicznej, a nie if
instrukcji zakodowanych na stałe).
Edycja: Prawdopodobnie jest lepszy sposób na robienie tego, co próbujesz zrobić. Zapytałem o to na początku mojej przygody z JavaScriptem. Sprawdź, jak działają obiekty JavaScript.
Proste wprowadzenie:
// create JavaScript object
var obj = { "key1": 1 };
// assign - set "key2" to 2
obj.key2 = 2;
// read values
obj.key1 === 1;
obj.key2 === 2;
// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;
// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;
javascript
variables
switz
źródło
źródło
Odpowiedzi:
Jeśli jest to zmienna globalna, to
window[variableName]
lub w twoim przypadkuwindow["onlyVideo"]
powinno wystarczyć .źródło
scope[property]
nawet przezthis[property]
this
to kontekst, na który wskazuje, zależy od tego, jak wywoływana jest funkcja. W JS 50% czasuthis
jest możliwe,window
chyba że włączysz tryb ścisły i stanieszthis
sięundefined
i wyrzuci błąd. Zakres jest czymś zupełnie innym i nie jest obiektem (z wyjątkiem zasięgu globalnego, który jest dublowany przezwindow
obiekt)WebWorkers
(gdzieself
odnosi się do zasięgu globalnego, podobnie jak w przeglądarce, gdzie jest równywindow
) i Node.js, gdzieglobal
jest zmienna, którą chcesz. Nowsze działa z lokalnymi zakresami, takimi jak treść funkcji.const
użycie tej metody?Javascript ma
eval()
funkcję na takie okazje:Edycja: Przepraszam, myślę, że zbyt szybko odrzuciłem pytanie. Otrzymasz tylko zmienną, aby ustawić ją, której potrzebujesz
lub jeśli używasz ciągu:
Ale wyobrażam sobie, że istnieje bardziej odpowiedni sposób na osiągnięcie tego, czego szukasz? Nie sądzę, że eval () jest czymś, czego naprawdę chcesz używać, chyba że istnieje ku temu dobry powód. eval ()
źródło
eval()
odpowiedź została uznana za skreśloną, a ta pozytywna?window[varname]
ma efekt uboczny wprowadzania zmiennych globalnych, co może nie być pożądane. @Shaz Nie sądzę, żebyś dał współczesnym tłumaczom JS wystarczający kredyt. Są niezwykle szybkie, a parsowanie i wykonywanie prostej operacji przypisania jednego wiersza nie zwiększy niczyjego użycia procesora, o ile nie odbywa się to w zegarze 1ms lub w ciasnej pętli.W zakresie rozwiązań eval vs. globalne zmienne ...
Myślę, że każda z nich ma swoje zalety, ale tak naprawdę jest to fałszywa dychotomia. Jeśli jesteś paranoikiem globalnej przestrzeni nazw, po prostu utwórz tymczasową przestrzeń nazw i użyj tej samej techniki.
Jestem prawie pewien, że możesz wtedy uzyskać dostęp jako tempNamespace.myVarProperty (teraz 5), unikając używania okna do przechowywania. (Ciąg można również umieścić bezpośrednio w nawiasach)
źródło
Powiedz nie ewangelii zła . Przykład tutaj: https://jsfiddle.net/Shaz/WmA8t/
źródło
function aScope() { this[myString] = function() { alert("Hello!"); };};
this
nie odnosi się do zasięgu lokalnego, ale do obiektu, do którego funkcja jest przypisana podczas wywołania.Możesz uzyskać dostęp do obiektu okna jako tablicy asocjacyjnej i ustawić go w ten sposób
źródło
Metoda window [„nazwa zmiennej” działa TYLKO, jeśli zmienna jest zdefiniowana w zakresie globalnym. Prawidłowa odpowiedź to „Refaktoryzacja”. Jeśli możesz podać kontekst „obiektowy”, istnieje możliwe ogólne rozwiązanie, ale istnieją pewne zmienne, których żadna funkcja globalna nie mogłaby rozpoznać na podstawie zakresu zmiennej.
źródło
Jeśli próbujesz uzyskać dostęp do właściwości obiektu, musisz zacząć od zakresu
window
i przejść przez każdą właściwość obiektu, aż dojdziesz do tej, którą chcesz. Zakładając, żea.b.c
został zdefiniowany gdzieś w skrypcie, możesz użyć następujących opcji:Będzie to działać w celu uzyskania właściwości dowolnego obiektu, bez względu na jego głębokość.
źródło
name
jako nazwy zmiennej, twój przykład zawiedzie, ale działa z innymi nazwami zmiennych. Może to mieć związek z obiektem Window posiadającym jużname
zmienną. Również włączenie tej.value
metody spowodowało awarię. Szukam interpretacji głęboko zagnieżdżonych zmiennych obiektowych, a twoja metoda wskazuje dobry kierunek. Dzięki.Uncaught TypeError: Cannot read property 'split' of undefined
Możesz to zrobić w ten sposób
źródło
Można to zrobić w ten sposób
źródło
Poniższy kod ułatwia odwoływanie się do każdego elementu DIV i innych elementów HTML w JavaScript. Ten kod należy dołączyć tuż przed tagiem, aby wszystkie elementy HTML były widoczne. Po nim powinien znajdować się kod JavaScript.
źródło