gruss Cybaer,
Rein gefühlsmäßig. Ein "Interface" ist mir zu unbestimmt. ...
...
...Interface kann IMHO dagegen auch was ganz anderes sein ...
stellt [[EventDispatcher]] in folgendem verkuerztem bsp. jedem
angemeldeten objekt ein [EventTarget]-interface zur verfuegung,
oder ordnest Du das auch unter "enhancing" / "binding" ein?
/*
wie inzwischen ueblich, folgenden code mal in
die [[link:http://jconsole.com/]] reinschmeissen:
*/
this.EventDispatcher = (function () { // [[EventDispatcher]]-Singleton
/*
viel platz fuer *private protected* helferfunktionalitaet
*/
var Event = (function (target, type) {/*
... nicht ganz so viel code ... */
});
var EventListener = (function (thisTarget, type, handler) {/*
... etwas mehr code ... */
});
var EventTarget = (function () {
var events = {};
this.addEventListener = (function (type, handler) {/* ... viel code ... */});
this.removeEventListener = (function (type, handler) {/* ... viel code ... */});
this.dispatchEvent = (function (evt) {/* ... viel code ... */});
});
return {
register: (function (obj) {EventTarget.call(obj);}), // [*1]
unsubscribe: (function (obj) {/* ... nicht ganz so viel code ... */})
};
})();
this.Queue = (function () { // [[Queue]]-Konstruktor.
/*
jedes [Queue] objekt bekommt jetzt auch [EventTarget]-
funktionalitaet zugewiesen.
das objekt wird an dieser stelle *einfach nur signiert*?
bitte korrigiert mich.
spaeter greift dann die bindung an das konstrukt wofuer
ich einen passenden begriff, auch gerne in analogie zu
anderen programmiersprachen, suche.
was passiert hier also von der begrifflichkeit her:
- das objekt implementiert ein Interface?
- das objekt meldet sich am Funktor an?
- das objekt wird an den Funktor gebunden?
- ... ?
*/
//var timer = new Date();
EventDispatcher.register(this); // siehe [*1] : [register]
//print((new Date() - timer) + " msec");
var self = this, list = [];
var onEnqueue = (function (obj) {
self.dispatchEvent({target: self, type: "onEnqueue", elm: obj/*, even more key:value pairs */});
});
var onDequeue = (function (obj) {
self.dispatchEvent({target: self, type: "onDequeue", elm: obj/*, even more key:value pairs */});
});
var onEmpty = (function () {
self.dispatchEvent({target: self, type: "onEmpty"/*, even more key:value pairs */});
});
this.enqueue = (function (obj) {
list.push(obj);
this.length = list.length;
onEnqueue(obj);
});
this.dequeue = (function () {
var obj = list.shift();
//onDequeue(obj);
if (list.length === 0) {
onEmpty();
}
onDequeue(obj);
return obj;
});
this.length = 0;
});
var myQueue = new Queue();
print(myQueue);
props(myQueue);
vielen dank fuer Deine geduld - so long - peterS. - pseliger@gmx.net
--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]