Wie erweitert man Objekt-Literal-Objekte für Ereignisse in NodeJS?

8

Ich versuche, mein Node.js Objekt Cast-Ereignisse zu haben. Jetzt ist das kein Problem, wenn ich "statische" Objekte mache und sie instanziiere, aber wie mache ich das, wenn mein Objekt keinen statischen Großvater hat, wie wenn ein Objekt mit Objektliteral -Notation erstellt wurde?

Ich bin es gewohnt, ExtJS-Syntax zu schreiben, also bevorzuge ich alles im Objektliteral.

%Vor%

Dies ist ein Objekt. Es hat keinen Konstruktor, da es nicht mehr Instanzen geben muss.

Wie erlaube ich myObject nun, Ereignisse zu senden?

Ich habe versucht und versucht, Code anzupassen, aber Ich kann es nicht zum Laufen bringen, ohne mein Objekt in ein Formular mit einem Konstruktor wie umzuwandeln:

%Vor%

Oder füge meine Funktionen / Prototypen zu etwas hinzu, das wie folgt konstruiert ist:

%Vor%

Wie erlaube ich myObject , Ereignisse zu emittieren, während ich die Objektliteralnotation behalte? Es gibt so viele verwirrende Wege, dies zu tun, aber nicht eine innerhalb dieser JSON- wie notierte Objekte.

    
Redsandro 31.05.2012, 16:04
quelle

3 Antworten

9

Warum nicht Komposition statt Vererbung verwenden?

%Vor%     
ziad-saab 01.06.2012, 01:30
quelle
7

Leider ist Ihre gewünschte objektliterale Syntax nicht möglich. Es ist weil

%Vor%

entspricht

%Vor%

darin, dass der Prototyp von obj bei der Erstellung auf Object.prototype fixiert ist und Sie das später nicht ändern können.

Da Sie nur eine einzelne Instanz möchten, würde ich argumentieren, dass sinnvoll ist, eine Instanz von EventEmitter zu erstellen und ihr Eigenschaften zuzuweisen:

%Vor%

Sie brauchen hier nicht util.inherits , da Sie nur eine Instanz haben, also gibt es keine Kette zum Einrichten.

    
J. Ryan Stinnett 01.06.2012 01:21
quelle
-1
___ answer 10837558 ___

Das ist eine völlig wilde Vermutung, da ich JavaScript nur für Browser programmiert habe. Können Sie jedoch nicht einfach EventEmitter auf Ihrem Objekt aufrufen, nachdem Ihr Objektliteral erstellt hat?

%Vor%     
___ qstnhdr ___ Wie erweitert man Objekt-Literal-Objekte für Ereignisse in NodeJS? ___ answer10843296 ___

Leider ist Ihre gewünschte objektliterale Syntax nicht möglich. Es ist weil

%Vor%

entspricht

%Vor%

darin, dass der Prototyp von %code% bei der Erstellung auf %code% fixiert ist und Sie das später nicht ändern können.

Da Sie nur eine einzelne Instanz möchten, würde ich argumentieren, dass sinnvoll ist, eine Instanz von %code% zu erstellen und ihr Eigenschaften zuzuweisen:

%Vor%

Sie brauchen hier nicht %code% , da Sie nur eine Instanz haben, also gibt es keine Kette zum Einrichten.

    
___ qstntxt ___

Ich versuche, mein Node.js Objekt Cast-Ereignisse zu haben. Jetzt ist das kein Problem, wenn ich "statische" Objekte mache und sie instanziiere, aber wie mache ich das, wenn mein Objekt keinen statischen Großvater hat, wie wenn ein Objekt mit Objektliteral -Notation erstellt wurde?

Ich bin es gewohnt, ExtJS-Syntax zu schreiben, also bevorzuge ich alles im Objektliteral.

%Vor%

Dies ist ein Objekt. Es hat keinen Konstruktor, da es nicht mehr Instanzen geben muss.

Wie erlaube ich %code% nun, Ereignisse zu senden?

Ich habe versucht und versucht, Code anzupassen, aber Ich kann es nicht zum Laufen bringen, ohne mein Objekt in ein Formular mit einem Konstruktor wie umzuwandeln:

%Vor%

Oder füge meine Funktionen / Prototypen zu etwas hinzu, das wie folgt konstruiert ist:

%Vor%

Wie erlaube ich %code% , Ereignisse zu emittieren, während ich die Objektliteralnotation behalte? Es gibt so viele verwirrende Wege, dies zu tun, aber nicht eine innerhalb dieser JSON- wie notierte Objekte.

    
___ tag123nodejs ___ Node.js ist ein ereignisbasiertes, nicht blockierendes asynchrones I / O-Framework, das die Google V8-JavaScript-Engine und die libuv-Bibliothek verwendet. Es wird für die Entwicklung von Anwendungen verwendet, die die Fähigkeit zum Ausführen von JavaScript sowohl auf dem Client als auch auf der Serverseite stark ausnutzen und daher von der Wiederverwendbarkeit von Code und dem Mangel an Kontextwechsel profitieren. ___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123eventemitter ___ Ein Ereignisemitter ist eine Plattform zum Auslösen und Abhören von Ereignissen. ___ tag123events ___ Ein Ereignis ist eine Möglichkeit für eine Klasse, Benachrichtigungen an Listener zu senden, wenn eine bestimmte Sache passiert. ___ tag123objectliteral ___ JavaScript-Objekt Literal Ein Objektliteral ist eine durch Kommas getrennte Liste von Name-Wert-Paaren, die in geschweifte Klammern eingeschlossen sind. In JavaScript wird ein Objektliteral wie folgt definiert: var meinObjekt = {     sProp: 'irgendein Zeichenfolgenwert',     Anzahl: 2,     bProp: falsch }; ___ answer10843350 ___

Warum nicht Komposition statt Vererbung verwenden?

%Vor%     
___
Mattias Buelens 31.05.2012 16:27
quelle