Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obiekt JSON vs singleton, Co może singleton czego nie może obiekt JSON
pp-layouts
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 28.09.2007
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Zrobiłem sobie klasę AJAX, będącą zestawem narzędzi i mającą jakieśtam swoje właściwości (do konfiguracji). Utworzyłem ją jako zwykły obiekt, będący zmienną globalną mniej więcej tak:

Kod
var AJAX = {
  property1 : null,
  property2 : null,
  method1 : function() {
    ...
  }
}



Odwołuję się do niej prosto: AJAX.method1(); . Komodo Edit daje prawidłowe podpowiedzi do właściwości i metod.
Co więcej, w środku utworzyłem więcej modułów JSON, tak że mogę odwoływać się do nich per AJAX.module1.method1().

Wszystko pięknie. Prawie dokładny odpowiednik klasy statycznej w PHP. Nawet lepiej, bo to klasa która może zawierać inne klasy. Moduł składający się z modułów. Git.

W takim razie po co używać singletonów? Co one mogą, czego nie może moduł JSON?

Zrobiłem pełną edycję poprzedniego posta, bo nikt chyba nie złapał o co mi w ogóle chodzi.



Ten post edytował pp-layouts 1.12.2009, 00:23:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pp-layouts
post
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 28.09.2007
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Proszę, wytłumacz dokładniej, w jaki sposób klasa statyczna zajmuje więcej miejsca w pamięci. Czy kod metod niestatycznych nie zużywa miejsca w pamięci jeśli nie są użyte? Czyli jak, dopiero zaczynają używać miejsce po pierwszym użyciu?

A propos Twojego pierwszego posta, to pewnie wina przykładu, zbyt abstrakcyjny, może gdybyś zapodał na czymś bardziej konkretnym. Nie rozumiem też, co ma w ogóle JSON (a właściwie object literal, bo JSON wymaga, żeby nazwy właściwości pisać z użyciem cudzysłowów) do "this". This-a można używać odnosząc się do wnętrza literala (namespace-a), a można do instancji klasy, zależnie od kontekstu. To czy zapiszę klasę w formie funkcji, czy zapiszę ją jako obiekt OL - cóż, wydaje mi się, że to tylko kwestia zapisu, nie ma to chyba żadnych innych implikacji, bo próbowałem na dużych klasach tych 2 sposobów zapisu zamiennie i wydawały się działać dokładnie identycznie. Przy zapisie w OL może wystąpić niejednoznaczność "this". Ale tylko w przypadku kiedy nie przypisuje się bezpośrednio obiektu do prototypu. Wtedy w kontekście OL będzie oznaczać namespace, a w kontekście instancji tą instancję.

Co do metod i zmiennych prywatnych - to znów wydaje mi się sztuką dla sztuki, bo z tego co wiem, JavaScript tego po prostu nie obsługuje, ale można to wymusić - kosztem skomplikowania kodu. I znów z tego co wiem, dostępność zmiennych i metod ogranicza się dla ułatwienia życia, stąd umyka mi sens tej operacji. (Poza może very very defensive programming). Bo jeśli chodzi o ułatwienie życia developerom, to o wiele prostszy i wygodniejszy jest JSDoc, gdzie można opisać sobie klasy i dostępność keywordami takimi jak @class, @public, @private, @final itede.

Jak znajdę trochę czasu wolnego, muszę zrobić kiedyś trochę benchmarków różnych rozwiązań - zobaczymy w praktyce co jest szybsze i o ile.

Jak już mówimy o szybkości, zastanawia mnie też, czemu wszędzie używa się if (typeof(zmienna) == 'undefined') zamiast if (zmienna === undefined). Pierwsze wydaje mi się dużo wolniejsze, bo wymaga porównania napisów, a drugie odpala super szybką funkcję systemową, zbliżoną strukturalnie do isNan(). Wiem, że można złośliwie przypisać do undefined jakąś wartość, ale znów pojawia się pytanie - po co?

Dalej, jQuery używa lokalnych definicji undefined, które są === undefined. Czytałem, że to przyspiesza kod, ale czy na tyle znacząco, żeby używać tego poza frameworkiem? I czy aby jest to jeszcze aktualne dla nowych silników JS? (FF3.5, O10, Chrome 3)

Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(pp-layouts @ 10.01.2010, 17:12:24 ) *
Jak już mówimy o szybkości, zastanawia mnie też, czemu wszędzie używa się if (typeof(zmienna) == 'undefined') zamiast if (zmienna === undefined). Pierwsze wydaje mi się dużo wolniejsze, bo wymaga porównania napisów, a drugie odpala super szybką funkcję systemową, zbliżoną strukturalnie do isNan(). Wiem, że można złośliwie przypisać do undefined jakąś wartość, ale znów pojawia się pytanie - po co?

to nie chodzi o przypisanie wartości - jak w temacie do którego podałem link zauważyłeś to jestem bardziej hobbistą ale... na szybko sprawdziłem i stwierdzam - musiałbyś mieś pewność, że ta zmienna została jakoś zdefiniowana przynajmniej, czy jakoś zainicjowana gdzieś - i nie mam na myśli wartości - szybko to sprawdziłem w pasku adresu wpisując:
java script:if(a === undefined)alert('fffffff');void(0); //to nie działa
a to zadziała:
java script:var a; if(a === undefined)alert('ffff');void(0); //to działa
podczas gdy typeof zadziała także dla nie zainicjowanych zmiennych - jeśli odpowiednio jest kod napisany można zrezygnować z typeof, już przy samej definicji funkcji function cos(a,(IMG:style_emoticons/default/cool.gif) {...} jakby inicjujemy te zmienne (choćby nie przypisując wartości)

Cytat(pp-layouts @ 10.01.2010, 17:12:24 ) *
Dalej, jQuery używa lokalnych definicji undefined, które są === undefined. Czytałem, że to przyspiesza kod, ale czy na tyle znacząco, żeby używać tego poza frameworkiem? I czy aby jest to jeszcze aktualne dla nowych silników JS? (FF3.5, O10, Chrome 3)

zanim w prost wyjaśnię napiszę co innego - js jest bardzo mocno obiektowy, mocniej niż nie jednemu się wdaje (dawniej sam tego nie wiedziałem), a to, że jest inny (i niby łatwy, bo do prostych rzeczy jest łatwy), oraz to, że inaczej definiuje się obiekty niż "normalnie" wielu wprowadza w błąd...
i dalej to pasowało by na to o co pytasz spojrzeć patrząc na zasięg zmiennych w js - w php od tak do zewnętrznych zmiennych nie ma zasięgu...

i teraz czy w js warto "buforować" odwołanie do obiektu bądź zmienną(IMG:style_emoticons/default/questionmark.gif) samo undefined o którym piszesz jest w obiekcie window - szukając zmiennych funkcja w pierw sprawdza czy jest ona zdefiniowana lokalnie - nie ma jej to idzie w górę (sam wiesz, że obiekty można zagnieżdżać - funkcje w js też - i teraz tak przechodzi przez wszystkie obiekty aż do ostatniego gdzie jest zdefiniowana zmienna w ostatnim obiekcie window (obiekcie globalnym - no może nie do końca - nie chcę tutaj polemizować ;p).... alo znowu zboczyłem z tematu - a czy słusznie - może i tak...

jeśli tylko raz coś sprawdzasz, do czegoś wewnątrz tylko raz się odwołujesz to nie warto, lecz jeśli wewnątrz masz pętlę i tych porównań jest wiele to warto, lub jeśli danej metody często używasz to możesz tą zmienną zbuforować bliżej jej zasięgu.... - to jest tak jak z odwołaniami do elementu DOM - przecież w pętli nie będziesz co chwila szukał elementu przez document.getElementsByTagName('bleble')[0] - skoro zawsze używasz tego samego obiektu bądź jego wartości, podobnie count w php powinno się obliczyć na początku, żeby nie liczyło co każde sprawdzenie warunku...


ale główny temat był o singleton ;p
Cytat(pp-layouts @ 10.01.2010, 17:12:24 ) *
Proszę, wytłumacz dokładniej, w jaki sposób klasa statyczna zajmuje więcej miejsca w pamięci. Czy kod metod niestatycznych nie zużywa miejsca w pamięci jeśli nie są użyte? Czyli jak, dopiero zaczynają używać miejsce po pierwszym użyciu?


z tego co mi wiadomo pamięć jest przydzielona od razu by dana metoda, funkcja mogły zostać użyte w każdym momencie a nie dopiero po pierwszym użyciu, metody statyczne i zmienne są wszędzie także w zasięgu - ja bym to przyrównał (ale w duuużym skrócie i ogólnikowo - czyli to nie jest to samo!!!) raczej trochu do stosu i sterty znanego z c++, przy czym pierwsze jest niby szybsze, ale z tym z kolei nie można przesadzać...

poza tym na te pytania jakie zadajesz w js zaciekawi Cię kilka filmików (no nie wszystkie ale kilka jest tam ciekawych):
http://developer.yahoo.com/yui/theater/
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 19:18