Dojo toolkit

Objektum orientált programozás

dojo/_base/declare

A JavaScriptben prototípusos öröklődés van, nem pedig osztályalapú. A Dojo ezzel a modullal lehetőséget ad az osztályalapú öröklődés szimulálására.

Osztály definiálása

A declare szignatúrája:

// in demo/Animal.js: define([ "dojo/_base/declare" ], function(declare) { return declare(null, { constructor : function(legs) { this.legs = legs; }, }); });

Az osztály használata:

require([ "demo/Animal" ], function(Animal) { var dog = new Animal(4); console.log(dog.legs); })

Ha az osztály tartalmaz tömböket vagy más objektumokat, azokat a konstruktorban kell deklarálni, hogy minden példánynak meglegyen a saját másolata. Egyszerű típusoknál nincs ezzel probléma, mert azok érték szerint adódnak át, az objektumok azonban referencia szerint.

Öröklődés

A superclass argumentummal származtathatunk más osztályokból.

Az ősosztályok konstruktorai mindig automatikusan meghívódnak a leszármazott konstruktora előtt. Minden más esetben így hivatkozatunk az ősosztályban lévő ugyanolyan nevű metódusra: this.inherited(arguments)

Példa: demo/Bird.js

A dojo támogatást ad a többszörös öröklődésre, C3 superclass linearization algoritmust implementál. Az első átadott osztály az igazi ősosztály, a többi csak mixin, amiknek a tulajdonságai bele vannak keverve a leszármazottba. A gyakorlatban ez azt jelenti, hogy ilyen osztályokra nem alkalmazhatjuk az instanceOf operátort, hanem helyette az isInstanceOf() függvényt használhatjuk.

Példa: demo/Cocktail.js

Konvenciók

define([ "dojo/_base/declare" ], function(declare) { var _MyPrivateItem = declare(null, { someProperty : null }); return declare(null, { item : null, constructor : function() { this.item = new _MyPRivateItem(); } }); });