ugrás a tartalomhoz

Osztály generálás!

Karvaly84 · 2011. Jún. 25. (Szo), 22.06
Sziasztok guruk!

Aki ráér és tud tanácsot adni az segíthetne. Leírnám röviden mire gondolok most éppen:

var FirstClass = Class(function() {
    this.name = 'FirstClass';
});

var SecondClass = Class(FirstClass, function() {
    // Itt azt szeretném elérni, hogy a this.name már legyen beállítva,
    // vagyis örökölve, az első paraméterböl mire ide jutnék.
    this.super = this.name;
    this.name = 'SecondClass';
})
Pár kérdés felmerült bennem, avval kapcsolatban hogy hogyan is érdemes ezt csinálni, egy felől jó lenne ha tudnék hibrid osztályokat létrehozni több közös őssel, evvel az a probléma hogy mikor a prototype-ot másolom több objektumbol amik egy osztály példányai akkor a instanceof operátor nem minden esetben ad vissza true értéket csak az utoljára másolt objectumot tekinti ösnek, ezt ugy oldottam meg hogy a első osztály egy példányát beírtam egy üres függvény prototype-jába majd példányosítottam, de evvel az volt a bajom hogy nem hatékony a sok függvény generálás, amit csak a megfeleő öröklés miatt vezettem be.

Továbbá pl. tegyük fel, hogy van egy Observer-ünk, amiben van ugye a lista a függvényekkel, normál esetben ez ugye privát láthatóságúnak érdemes csinálni, ha pl úgy szeretném hogy a Java-hoz hasonló módon tudjam kezelni ezt a dolgot akkor az egész osztályt a konstruktorban kell legyártanom, ami ugye megint nem hatékony.

Szóval lehet hogy kicsit zavarosra sikerült, akkor boccs, de aki ért ebből valamit és tudna nekem segíteni akár példa kódokkal azt megköszönném... a fenti kódra vissza térve jelenlegi állapotban ha kiterjesztek egy osztályt, ami ugye a példán a FirstClass, akkor a második paraméterben lévő függvényből nem érem el annak 'name' tulajdonságát, mert a Class függvény azt csinálja jelenleg, hogy a paraméterül kapott függvényekből példányt készít, amit hozzá ad egy új függvény prototype-jához, majd bele másolja ennek prototype-jába a második függvény példányának elemeit. de így nem érem el el a FirstClass-ból örökölt name tulajdonságot, ezt csak úgy tudnám megtenni ha az egész osztályt a constructorban hoznám létre és a FirstClass példányát másolnám a SecondClass.prototype-jába de akkor nem tom változtani a prototypust máshonnan mert a constructorban el fedem, és így nem annyira hatékony a kód.

Most persze nem aszt szeretném a javascript-töl, hogy legyen java, de mégis valami színvonalat szeretnék bele vinni, hogy kicsit hasonlítson az objektum orientált nyelvekhez.
 
1

nincsenek osztályok

Poetro · 2011. Jún. 25. (Szo), 23.56
JavaScript-ben nincsenek osztályok.(pont) Ezért nem máshogy kell benne programozni, mint az olyan nyelvekben, ahol van. De ettől még a nyelv teljes mértékben objektum orientált. Egy nyelv nem attól lesz objektum orientált, hogy vannak benne osztályok. Túl sok szintű öröklést egyébként nem is érdemes csinálni, mivel lassú működést eredményezhet. Inkább érdemes sekély mélységű, ám megfelelően körülhatárolt objektumokat létrehozni.

A legtöbb esetben nincs is szükség konstruktorokra, mivel az objektumainkat sokkal könnyebben fel tudjuk írni, mint az osztály alapú nyelvekben. Egyszerűen felírjuk az objektum struktúráját, tulajdonságait, metódusait, és kész. Nem kellett egyetlen konstruktort / osztálydefiníciót írni, mégis készen van az objektum.

Egy program nem attól lesz színvonalas, mert teli van osztálydefiníciókkal, konstruktorokkal, hanem attól, hogy a kód jól áttekinthető, helyesen működik és megfelelően dokumentált. Amennyiben nem tetszik a nyelv, használhatsz más nyelveket is, amelyek képesek JavaScript kódot generálni (CoffeeScript, Objective-J, GWT).