Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zorientowany obiektowo Javascript - konstruktor i dziedziczenie
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
karop
Witam,

Porwałem się z motyka na słońce mając jquery i code igniter u boku - piszę aplikację do gry w szachy przez przeglądarkę.

Jestem w fazie początkowej - bierki już mogą się ruszać po przeciągnięciu (prawie guitar.gif ). I tutaj bardzo przydałby mi się OOP JS, żeby mieć klasę rodzica z ogólnym konstruktorem wyznaczającym pozycję, generującym obrazek na planszy itd. Właściwie wszystkie klasy będą dziedziczyły to samo oprócz dozwolonych ruchów.

1. Jak stworzyć funkcję w klasie (w JS to oczywiście funkcja), która będzie miała rolę konstruktora w PHP?

2. Jak stworzyć relację "extends"?


mat-bi
http://kurs.browsehappy.pl/JavaScript/Klasy
http://kurs.browsehappy.pl/JavaScript/Dziedziczenie

Taa, nie wiedziałem, że wujek Google jest aż taaak nieprzyjazny...
zegarek84
Details of the object model - tu w dokumentacji mozilli jest to dosyć w miarę opisane...

w js w zasadzie wszystko jest obiektem - nawet zwykła funkcja... i funkcja tutaj jest funkcją/metodą/konstruktorem/obiektem...

generalnie by parent konstruktora wywołać w kontekście this potomnej "klasy" to możesz albo funkcję rodzica przypisać do jakiejś zmiennej/metody w kontekście this po czym tą zmienną wykonać bądź skorzystać z podstawowych funkcji jak apply i call (poczytaj na dokumentacji mozilli)...

rozszerzenie najlepiej i najwydajniej robić przez utworzenie obiektu klasy rodzica w prototype klasy potomnej - często nie chce się od razu wywoływać konstruktora klasy rodzica do prototype i są na to różne tricki jak np. ten napisany z palca:
[JAVASCRIPT] pobierz, plaintext
  1. var fCloneProto; // funkcja do tworzenia obiektu z prototypu innych "konstruktorów"
  2. (function(_fClearConstructor){
  3. fCloneProto = function(constructor){
  4. _fClearConstructor.prototype = constructor.prototype;
  5. constructor = null;
  6. return new _fClearConstructor();
  7. };
  8. })(function(){}); // jakoś jak nie trzeba to nie piszę var tylko daję do argumentów funkcji ;p
  9.  
  10. var b = function(){};
  11. function c(){
  12. // a tak jeszcze jakby chcieć wywołać parenta lub inną funkcję w kontekście this
  13. b.call(this); //a o przekazywaniu argumentów to se doczytaj...
  14. };
  15. c.prototype = fCloneProto(b);
  16.  
  17. var d = new c;
  18. alert(d instanceof b);
[JAVASCRIPT] pobierz, plaintext


ogólnie musisz poeksperymentować by skumać czaczę ;] - ale js jest super prosty, fajne są domknięcia i wiele tricków - choć daaawno się już nim jakoś nie bawiłem

ps. w js musisz zrozumieć zasięg zmiennych - jeśli tego nie będziesz rozumiał i będziesz wstawiał gdzie popadnie definicję zmiennych przez var to nie uzyskasz kilku ciekawych efektów - ale z kolei jeśli w ogóle nie rozumiesz co się dzieje, to wstawiaj na początek gdzie popadnie definicję var gdyż inaczej sobie ponadpisujesz zmienne w globalnym scope a te nie zdefiniowane zdefiniujesz w globalnym scope czyli w obiekcie window...
karop
Dzięki chłopaki!

Dopiero teraz miałem chwilę, żeby na to spojrzeć.

zegarek84: trochę już w JS (bardziej w jQuery) pisałem, obczajam nieco temat (nie zabierał bym się za szachy:).

Sprawa z klasami jest pokopana w JS. Po kilku próbach doszedłem do tego jak tworzyć obiekt z danym zestawem zmiennych (to akurat nic trudnego...)

CODE
Object.prototype.parent = function (supClass,x,y) {
tempObj = new supClass(x,y);
for (property in tempObj) {
this[property] = tempObj[property];
}
};

function Bazowa(x,y) {

this.value = x;

this.metoda = function () {
return this.value;
}

}

function Pochodna(x,y) {
this.parent(Bazowa,x,y);

}

foo = new Pochodna(34,23);

alert(foo.metoda());
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.