peterS.: weiteres beispiel zum besseren verstaendnis einer namensfindung

Beitrag lesen

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:]