Szukaj Pokaż menu
Witaj nieznajomy(a) zaloguj się lub dołącz do nas
…BO POWAGA ZABIJA POWOLI

Forum > Hyde Park V > [Javascript] - nazwa zmiennej?
Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
AdlerPL - Superbojownik · przed dinozaurami
Mam pytanie. Da się w JS zrobić coś takiego:

var nazwa_przykladowej_zmiennej = funkcja();

function funkcja()
{
//Tu wpisz kod ^_^
}
I jak zrobić taką funkcję która by zwracała ... nazwę zmiennej która ją wywołała

Czyli np. jeżeli mamy zmienną:
var Variable = funkcja();
to funkcja() zwróci nam np. stringa "Variable".
A jak mamy,
var Zmienna = funkcja();
to zwróci "Zmienna"

itd.

Nie mam totalnie pojęcia jak coś takiego w JS zrobić, albo inaczej odwołać się do nazwy zmiennej która wywołuje funkcję

--
Polska w ruinie to nie była diagnoza.
To była obietnica wyborcza.

pakalk
pakalk - Superbojownik · przed dinozaurami
Chcesz zrobić funkcję, która do zmiennej x przypisze jej nazwę? ;>

Jak rozumiem, chodzi Ci o coś takiego raczej...

function funkcja()
{
//Tu wpisz kod ^_^
}

var zmienna = funkcja;

zmienna(); // output: zmienna

???

Dziecko_Niespodzianka
Niewykonalne, bo ta informacja nie jest nijak przekazywana. Musisz excplicite przekazywać tę nazwę jako string. Ew. co możesz zrobić, to zamiast

var Zmienna = funkcja(); // i Zmienna miałaby się równać "Zmienna"

piszesz:

function setVar(varName){
eval("var "+varName+" = " + varName);
}

I teraz:

setVar("Zmienna") spowoduje, że będziesz miał zmienną Zmienna o wartości "Zmienna"


--
"Though I walk through the valley of the shadow of death, I will fear no evil" - yeah, because I'm the wickedest sonofabitch you're gonna find down here.
Uważam se DGC: DMkmsuoceEsHbNN8LUCWM1KN9TYwvCJfYC

salival
salival - Little Princess · przed dinozaurami
To trochę nie ma sensu. Kolejność wykonywania operacji całkowicie wyklucza to co chcesz zrobić. funkcja() nie dostaje żadnej informacji na temat zmiennej, do której będzie przypisana wartość. No i nie bardzo rozumiem, czy chcesz, by ta funkcja po prostu lokalnie "wiedziała", że zmienna, do której przypisujesz wynik ( a nie jak mylnie nazywasz to, że zmienna wywołuje funkcję, bo operacja jaka tu następuje to przypisanie i zmienna NIE WYWOŁUJE funkcji ), lub czy żeby zwróciła string z nazwą tej zmiennej Z PRZYPISANIEM do tej samej zmiennej ( nie wiem naprawdę jaki to ma sens ) lub rozumiesz "zwróciła" jako wypisze ten string, czy z nim cokolwiek zrobi innego.

--

Dziecko_Niespodzianka
:salival
Ty chyba chopie żeś w dużej korporacji nie pracował, skoro szukasz sensu w każdym tasku

--
"Though I walk through the valley of the shadow of death, I will fear no evil" - yeah, because I'm the wickedest sonofabitch you're gonna find down here.
Uważam se DGC: DMkmsuoceEsHbNN8LUCWM1KN9TYwvCJfYC

prond
prond - Superbojownik · przed dinozaurami
Można, tworząc obiekt z pojedynczą publiczną metodą uzyskać nazwę tej metody iterując po this. Zastanów się czy na pewno tego potrzebujesz, bo prawdopodobnie to co chcesz zrobić można zrobić prościej.

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

pakalk
pakalk - Superbojownik · przed dinozaurami
ziecko

Myslisz sie.

function setVar(varName){
eval("var "+varName+" = " + varName);
}

To mu co najwyzej stworzy zmienna lokalna. A nawet nie, bo jest w tym blad ;)

function setVar(varName){
eval(varName+" = '" + varName + "'");
}

To powiedzmy da radę globalnie, ale to bzdura.

Co do nazwy funckcji....

function foo()
{
return arguments.calee; // zwraca obiekt funkcji
}

Nazwa będzie pod callee.name, z tym że to nazwa zdefiniowanej funkcji przez "function xxx()". Anonimowe nie mają takiego czegoś.

Jak dla mnie albo niewykonalne, albo wykonalne w zawiły i niewarty świeczki sposób. Szukałem rozwiązania, więc nie napisałem od razu, że się nie da. Poza tym, nie bardzo wiedziałem o co kaman ;)

Kiedyś na frupie PHP była taka idea, żeby dało się odczytać kontekst wykonania funkcji, tzn. jeśli wartość zwracana jest przypisywana do zmiennej, wówczas dałoby się uzyskać do tej zmiennej dostęp (zbadać jej typ albo coś). Jakkolwiek jest to bez sensu, więc zostało pogrzebane dość szybko. To chyba próbowałeś na swoich przykładach pokazać.

Dziecko_Niespodzianka
A masz rację, że lokalną

--
"Though I walk through the valley of the shadow of death, I will fear no evil" - yeah, because I'm the wickedest sonofabitch you're gonna find down here.
Uważam se DGC: DMkmsuoceEsHbNN8LUCWM1KN9TYwvCJfYC

prond
prond - Superbojownik · przed dinozaurami
A WŁAŚNIE! Nie wystarczy Ci zapakować co trzeba w klasę i do właściwości (jak będzie w tym kontekście "properties" po polsku?) obiektu odwoływać się przez this?

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

pakalk
pakalk - Superbojownik · przed dinozaurami
JS i klasy

Nawet jeśli, to co mu to da? On chce - w sumie nie wiemy co. Albo zwrócić nazwę zmiennej, do której przypisuje wynik działania funkcji, albo zwrócić nazwę zmiennej, pod którą siedzi referencja do obiektu wywoływanej funkcji.

Najlepiej będzie jeśli Adler przedstawi problem. Może obejdzie się bez implementacji parsera js w js ;)

prond
prond - Superbojownik · przed dinozaurami
:pakalk nie trzeba pisać, w jslint jest gotowy ;).

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
zawieszona - 4ever alone stosiedemdziesiąttysięcy · przed dinozaurami
o jaaaaaa , jaki powalony wątek

pakalk
pakalk - Superbojownik · przed dinozaurami
W sumie fakt, że istnieje to ustrojstwo - zdążyłem już o tym zapomnieć, dawno w JS nie grzebałem na przyzwoitym poziomie. Pewnie ma w sobie jakiś sensowny parser, wypadałoby. Ale i tak idę o zakład, dolary przeciw orzechom, że da się problem rozwiązać pokojowymi środkami, bez wyciągania artylerii ;)

pies_kaflowy
:zawieszona Najlepsze, że nie wiadomo po jakiego ch*ja to pisać w Javie.:

--

pakalk
pakalk - Superbojownik · przed dinozaurami
:zawieszka

Cicho, hackujemy JM, nie chcemy żeby się redakcja dowiedziała

pakalk
pakalk - Superbojownik · przed dinozaurami
:pies_kaflowy widać już pod flame'a węgiel podrzuca....

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
tu siedza forumowe dziewice

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
zawieszona - 4ever alone stosiedemdziesiąttysięcy · przed dinozaurami
:cadaveria ja tu tylko na chwilkę

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
ja tez, zostawic slad dla potomnosci

prond
prond - Superbojownik · przed dinozaurami
:cad, nie, forumowi chwilowi prokrastynatorzy.

NMZC.

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
Avarie - Superbojowniczka · przed dinozaurami
Poru*alibyście zamiast gadać o jakiś pierdołach

--

pies_kaflowy
A tam, poruchali...
Już w tym roku dotykali cycków. Wystarczy...

--

macleod
macleod - Superbojownik · przed dinozaurami
ja tam się nie znam, bo jestem informatołem, dla mnie java to motór.
Lecz słyszałem, że informatyk w temacie pukania ma tylko dwie zmienne. Prawą rękę i lewą. Nie wiem czy to prawda?

--

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
fabick - bAnalny Samiec Beta · przed dinozaurami
Funkcjaaaaaaa! FUNKCJAAAAAA!

Tak się odwołuje u nas

--

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
Habita_tecum - Superbojowniczka · przed dinozaurami
myślałam, że jak kończycie

--

Hej, a może by tak wstawić swoje zdjęcie? To łatwe proste i szybkie. Poczujesz się bardziej jak u siebie.
AdlerPL - Superbojownik · przed dinozaurami
Funkcje:
function setVar(varName)
mi się nie przydadzą, bo mało to praktyczne jak użytkownik będzie musiał robić np:
var R120 = readValue("R120", 'Register', 120, 'int');


Dobrze rozwinę mój problem. Funkcja readValue pobiera parametry, przekazuje ją do innej funkcji która zajmuje się grupowaniem, formatem zapytań przed wysłaniem je na sterownik. Po odebraniu danych inne funkcje "deszyfrują" odebrane dane oraz zapisują je w odpowiednim miejscu i chciałbym żeby wartość ze sterownika wróciła do zmiennej, która wywołała funkcję readValue.
I tak:
- Nie mogę jej zrobić returnem, bo ten odeśle wartość i koniec. Cała biblioteka działa w miarę "asynchronicznie" jednak z powodów konstrukcji sterownika PLC, musi cyklicznie odpytywać sterownik i jeżeli nastąpiła zmiana wartości to jest ona przekazywana do zmiennej.

I działa to bardzo dobrze! Wykorzystuje przy tym event handlery itd. Ale problem pojawił się w jednym miejscu: Jak zwrócić wartość z tablicy do zmiennej. I tutaj pierwszym pomysłem było coś takiego:

var R120 = readValue( 'r', 120, 'd');

function readValue(Type, Register, Format)
{
.
.
//100 linijek kodu niżej
window.event.addListener("foo", function(){
R120 = window.multiArray[id_array][6]; //tablica w której zapisywana jest aktualna warość, nvm.
});
}

I wow działa. Ale teraz jak mam to przekazywać dynamicznie?

Racja mógłbym to robić:
var R120 = readValue('R120', 'r', 120, 'd');

function readValue(Var, Type, Register, Format)
{
.
.
.
window[Var] = window.multiArray[id_array][6];
}
I faktycznie działa. Ale zależy mi jednak na wygodzie i by działało to bez podawania nazwy zmiennej do której ma trafiać. Po prostu czy da się "dynamicznie" w funkcji wyciągnąć nazwę zmiennej która ją wywołała lub odwołać się do niej/ zwrócić do niej wartość bez korzystania z "return"

--
Polska w ruinie to nie była diagnoza.
To była obietnica wyborcza.

pakalk
pakalk - Superbojownik · przed dinozaurami
"wyciągnąć nazwę zmiennej która ją wywołała"

Tego chyba nikt nie rozumie

Nie rozumiem też co jest zwracane tu:

var R120 = readValue( 'r', 120, 'd');

Jeśli już coś, to powinien być zwracany obiekt monitorujący wykonanie obliczeń, przy okazji rejestrowałby handler reagujący na ich zakończenie. Przetwarzanie współbieżne się kłania.

var R120 = readValue( 'r', 120, 'd');
var R121 = readValue( 'r', 121, 'd');

R120.join();
R121.join();

etc.

Dalej jak w podręczniku - pule workerów, przetwarzanie rozproszone itd ;) ale jestem zbyt senny, żeby coś więcej napisać. Inni na pewno też napiszą co myślą.

prond
prond - Superbojownik · przed dinozaurami
:adlerpl po prostu chcesz zwracać wskaźnik do obiektu (a w JavaScriptcie obiekty są domyślnie przekazywane przy wywołaniu i returnie właśnie w ten sposób).

NMZC.

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

prond
prond - Superbojownik · przed dinozaurami
A tak na przyszłość jeśli nie wiesz jak coś zrobić w JavaScriptcie i google nie zwraca wyniku, to poczytaj sobie o tzw. closures - można przy ich użyciu emulować praktycznie każdą właściwość każdego języka programowania. NMZC.

--
Podaruj obiad kliknięciem
Żarty medyczne
Trzeba zmienić sygnaturkę...

pakalk
pakalk - Superbojownik · przed dinozaurami
A jak byś już się uparł przy swoim, to możesz przecież zrobić:

x = {
'R120' : ['r', 120, 'd'],
'R121' : ['r', 121, 'd'],
}

i zrobić nową

readValues(x);

która z automatu przejedzie po obiekcie (pamiętaj, że nieuporządkowanym) i odpali wszędzie

readValue('R120', 'r', 120, 'd');

z odpowiednio przekazanymi danymi.
Forum > Hyde Park V > [Javascript] - nazwa zmiennej?
Aby pisać na forum zaloguj się lub zarejestruj