Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> JS.Class biblioteka ułatwiająca tworzenie i rozszerzanie obiektów w JSie, http://code.google.com/p/jsclassextend/
deirathe
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


http://code.google.com/p/jsclassextend/

Mała biblioteka do tworzenia i rozszerzania obiektów w JSie. Prosta klasa:


  1. var Sample = JS.Class({
  2. test : function () {
  3. }
  4. });



rozszerzanie:
  1. var ExtendedSample = Sample.extend({
  2. test2 : function () {
  3. }
  4. });


instancja:

  1. var obj = new ExtendedSample();


więcej przykładów na googlecodzie, zapraszam do komentów (IMG:style_emoticons/default/smile.gif)

Ten post edytował deirathe 11.01.2011, 22:34:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





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

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


JavaScript jest specyficzny - aby zrozumieć o co mi chodziło przeczytaj także komentarze w przykładowych krótkich kodach

zależy co rozumiesz tutaj przez extend - jeśli to co np. w PHP extends rozszerzanie klas to obiekt przekazywany w metodzie extend nie powinien nadpisywać zmiennych - nadpisywanie powinno być w drugą stronę... nie działa także instanceof...

chyba, że chciałeś w drugą stronę, że dla przykładu cTest.extend(cTest2) - że cTest2 zostanie rozszerzone o cTest - jednak instanceof także nie działa gdy sobie zrobimy obiekt oTest2 = new cTest2; alert(oTest2 instanceof cTest);

dla przykładu tutaj np. zamiast zapisać:
[JAVASCRIPT] pobierz, plaintext
  1. var TestClass = JS.Class({
  2. a: 9,
  3. methodA : function (param) {
  4. //method body
  5. $('#hello').append(param);
  6. }
  7. });
  8. var oTest = new cTest;
  9. var cExtendedTestClass = TestClass.extend(oTest);
[JAVASCRIPT] pobierz, plaintext

można zapisać:
[JAVASCRIPT] pobierz, plaintext
  1. var cExtendedTestClass = JS.Class({
  2. a: 9,
  3. methodA : function (param) {
  4. //method body
  5. $('#hello').append(param);
  6. }
  7. }).extend(oTest);
  8. // lub ...extend(cTest)
  9. // gdzie oTest - obiekt, cTest - klasa - czyli także obiekt, tyle, że to konstruktor i funkcja...
[JAVASCRIPT] pobierz, plaintext


dokładniej o co mi chodzi zawarłem w przykładach
[JAVASCRIPT] pobierz, plaintext
  1. var cTest = function(){
  2. };
  3. cTest.prototype = {
  4. a: 2,
  5. b: 3
  6. };
  7.  
  8. //sample js class
  9. var TestClass = JS.Class({
  10. a: 9,
  11. methodA : function (param) {
  12. //method body
  13. $('#hello').append(param);
  14. }
  15. });
  16. var oTest = new cTest;
  17. var cExtendedTestClass = TestClass.extend(oTest);
  18.  
  19. var oExtendedTestClass = new cExtendedTestClass();
  20.  
  21. // return false, 2, 3, false;
  22. // powinno być: true, 9, 3 ?jaki może ma być inna logika?
  23. alert([oExtendedTestClass instanceof cTest, oExtendedTestClass.a, oExtendedTestClass.b, oTest instanceof cExtendedTestClass]);
  24.  
  25. var cNewClass = function(){};
  26. // extend cTest
  27. cNewClass.prototype = new cTest;
  28. // other methods
  29. cNewClass.prototype.a = 9;
  30. cNewClass.prototype.fCos = function(){};
  31. cNewClass.prototype.fOther = function(){};
  32.  
  33. var oNewClass = new cNewClass;
  34.  
  35. // return true, 9, 3;
  36. // powinno być: true, 9, 3
  37. alert([oNewClass instanceof cTest, oNewClass.a, oNewClass.b]);
[JAVASCRIPT] pobierz, plaintext


[edit]

jeszcze zapomniałem - przyczepiłbym się jeszcze do zmiennych "statycznych" - wiem, że wielu używa tej nazwy do tego typu konstrukcji, ale dla mnie używając tego określenia to co się robi na zmiennych powinno się dziać np. tak jak w PHP, że nie ważne z którego obiektu próbujesz się odwołać - czy to z wnętrza czy z zewnątrz [pomijam protected i public] to we wszystkich obiektach także utworzonych z dziedziczonych klas ta zmienna powinna mieć tą samą wartość... jak dla mnie skoro obiekty są przekazywane przez referencję to do prototypu dodałbym taki obiekt o stałej nazwie i co konstruktora funkcji o tej samej nazwie np. statyczne - czyli w efekcie cTest.statyczne['jakaś zmienna'] - a wewnątrz po stworzeniu obiektu np. this.statyczne['jakaś zmienna']...

ale to tak ogólnikowo piszę tylko ;] - jak to robiłeś, czy w prototypie konstruktora czy inaczej to kodu nie analizowałem...
nie sprawdzałem czy do extend można dać funkcję - no wiadomo, że można gdyż funkcja jest także obiektem, ale miałem na myśli, czy sprawdzasz, że jest to instanceof Function - gdyż jeśli tak to pasuje potraktować ją jako konstruktor lub jeśli rozszerzasz w drugą stronę to zamiast bezpośrednio iterować po funkcji to powinno się po jej prototypie...

Ten post edytował zegarek84 12.01.2011, 00:33:45
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: 9.10.2025 - 16:11