peterS.: [EventDispatcher] - [EventTarget]-Schnittstelle kurz erklärt.

Beitrag lesen

gruss Don P,

Habe es bis jetzt nur überflogen und was ich davon
verstanden habe ist, dass man mit diesem Konzept wohl
wirklich das umsetzen kann, was ich mir vorstelle.

Auf den ersten Blick zwar ein bisschen viel Code (v.a.
im komprimierten Teil), ...

den musst Du ja auch nicht verstehen. unkomprimiert und
lesbar gibt es den [EventDispatcher] ja auf der von mir
verlinkten [refctory.org].

viel wichtiger ist/sind das verhalten/die eigenschaften
der [EventTarget]-schnittstelle.

[addEventListener] gibt tatsaechlich die referenz auf das
gerade intern erstellte [EventListener]-objekt zurueck,
sodass man [removeEventListener] auch nur mit dieser
einen referenz aufrufen kann, und nicht in jedem fall
fuer eine abmeldung immer event-typ(:String) und
event-handler(:Function)-referenz bemuehen muss.

bei [dispatchEvent] ist es wichtig zu wissen, dass man
im argument den event-typ sowohl als reinen string als
auch als object-hash mit name-wert-paaren werfen kann.

im ersten fall wird immer der nicht zu korrumpierende
default-event geworfen, welcher beim anmelden eines
event-listeners auf einem objekt automatisch fuer genau
dieses objekt erstellt und innerhalb seines von ausssen
nicht erreichbaren [EventTarget]-scopes gekapselt wird.

ein default-event hat immer die gleichen drei und durch
[dispatchEvent] argumente nicht ueberschreibbaren
eigenschaften:

  • [target] die referenz auf das *dispatchende* objekt,
  • [type] den typ des events als string-value,
  • [timeStamp] ein date object, welches dem default-event
      beim seiner erstellung zugewiesen wird (ich weiss aber
      noch nicht, wann genau, ausser in einigen spezialfaellen,
      man das wirklich braucht).

im zweiten fall laesst sich auch eine objct-(hash) werfen,
um den default-event um genau diese name-wert-paare
anzureichern, z.b., wenn man alle angemeldeten event-handler
mit diesen zusaetzlichen informationen versorgen will/muss.

[animationReference].dispatchEvent({type: "onNextFrame", currentFrame: 4, amountOfFrames: 20, opacity: 0.2/*, even more key:value pairs */});]

... aber mal sehen, was sich damit
anfangen lässt.

... native JavaScript-objekte miteinander lose koppeln.

auf diese weise erobert man sich eine weitere facette,
die einen im sprachkern elegant und effizient programmieren
laesst.

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