Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: Globalny obiekt jako pseudo this

Buduję zestaw poleceń które mają działać w kaskadzie - jak w jQuery i wymiennie z nimi - coś w stylu

$(obiekt).funkcjonalnosc1().funkcjonalnosc2().css().fukkcjonalnosc3().click() itd

funkcjonalności przekazują sobie obiekt jako this - zawsze jeden obiekt, nigdy kolekcję.
Funkcjanalnosc2 potrzebuje (może potrzebować) informacji od funkcjonalności1 itd

i teraz pytanie:
czy zastosowanie obiektu myThis do przekazywania informacji, np funkcjonalnosc1 przypisuje myThis.color=red , następne funkcjonalności czytają color, jest bezpieczne?

Nie mogę nigdzie znaleźć jednoznacznego potwierdzenia czy kod javasript jest jednowątkowy - jeśli tak to nie powinno być problemu. Czy jednak kiedyś ktoś nie wpadnie na szatański plan aby zwiększyć wydajność silnika przez równoległe wykonanie części kodu? Wtedy może się to posypać.....
Artur Bilski

Artur Bilski Ruby on Rails &
Javascript Developer

Temat: Globalny obiekt jako pseudo this

Mylący tytuł wątku ;)

Jest bezpieczne bo JS jest jednowątkowy.
Co do samej notacji to chainowanie sugeruje że akcje mogą być przemienne. Oczywiście możesz sobie założyć w projekcie że nie są, ale jest to mylące. Z kolei wywołania w osobnych liniach niczym się nie różni, ale sugeruje że kolejność może mieć znaczenie.
Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: Globalny obiekt jako pseudo this

Artur B.:
Mylący tytuł wątku ;)
Wiem, ale nic właściwego nie przyszło mi do głowy ;)

Jest bezpieczne bo JS jest jednowątkowy.
To ja wiem - nie wiem natomiast czy standardy mówią że tak będzie zawsze - jak pisałem - gdyby podzielić kod na wątki to można by znacząco podnieść wydajność. Teoretycznie nikt nie powinien zrobić takiego numeru bez dania władzy nad tym programistom - tak jak teoretycznie przeglądarki powinny działać tak samo ;)
Co do samej notacji to chainowanie sugeruje że akcje mogą być przemienne. Oczywiście możesz sobie założyć w projekcie że nie są, ale jest to mylące.

No własnie o to chodzi - to ma być pseudo-język dla usera który może sobie zmodyfikować grubego klienta albo wręcz napisać własnego (zbudować z klocków) przy założeniu że zna jedynie podstawy html/js i ma na to niezawiele czasu.

Zamiast budować jedną procedurę która skonfiguruje cały obiekt z koszmarną ilością pól postanowiłem zrobić klocki - pierwszy to jakiś panel ala metro, następny to konfiguracja właściwego obiektu, następny to pozycjonowanie xy (albo nie jeśli ma być w standardowym układzie DOM) następny akcja jeśli obiekt ma być interaktywny itd.
Każdy kolejny klocek ma skontrolować co robi poprzedni gdyby komuś panel tworzący nowe, bazowe id przyszło ustawić na końcu ;)

Rozważałem nawet analizę ciągu jako tekstu aby "klocek" wiedział jaki jest następny "klocek" ale na to jestem za cienki ;)

konto usunięte

Temat: Globalny obiekt jako pseudo this

To co piszesz jest bardzo czesto stosowanym patternem woec raczej nie ma co sie obawiac :) ma to nawet swoja wlasna nazwe - chaining.

natomiast jednowątkowość / wiekowątkowość nie koniecznie ma coś tu do rzeczy, bo o ilechoc JavaScript dziala jednowątkowo, to bardzo często programuje się w nim asynchronicznie przyjmujac model oparty o zdarzenia, i są sytuacje, gdzie podobny pattern mógłby ci nie zadziałać (np. przy pobieraniu czegos AJAXem - funkcja sie konczy ale danych dalej jeszcze nie ma).

no ale jest pattern na obejście tego, czyli promisy, gdzie kod, który piszesz niewiele odbiega od tego co napisałes, tylko ze zamiast na rzeczywistym obiekcie operuje sie na pomocniczym obiekcie obietnicy(promise) i tak, robi sie taka kaskade jak w jQuery, z ta roznica, ze do tej kaskady dodaje sie callbacki. Wyglada to tak http://github.com/kriskowal/q

Następna dyskusja:

jak wywolac funkcje ktorej ...




Wyślij zaproszenie do