2016-12-07 4 views
0

Normalerweise würde ich eine Klasse erstellen und erweitern sie mit es6 Klassenhinzufügen Klasse Eigenschaften reguläre Funktion

Aber dieses Mal bekam ich nur eine reguläre Funktion, die Ich mag würde die EventEmitter zu

function hello(){ 
    return 'world'; 
} 

hello(); // world 

hinzufügen Die Funktion ist kein Konstruktor und sollte nicht mit new aufgerufen werden. Jetzt möchte ich auch die EventEmitter-Eigenschaften dieser Funktion hinzugefügt haben (ähnlich wie $ von jquery, wo es eine Funktion und ein Objekt ist)

Wie würde ich das erreichen?

Ich dachte etwas in Bezug auf:

const {EventEmitter} = require('events') 

function hello(){ 
    hello.emit('something', 'called foo') 
    return 'world' 
} 

const myEE = new EventEmitter() 
Object.assign(hello, myEE) 

hello.on('something', console.log) // called foo 
hello() // world 

aber das funktioniert nicht. Hast du irgendwelche Vorschläge? Hoffnung gibt es einen besseren Weg, dann so etwas wie hello.on = myEE.on für alle Eigenschaften der Veranstaltung zu tun

Antwort

1

Ihr Beispiel funktioniert nicht, weil alle Methoden die Sie suchen (zB on) sind nicht im Objekt selbst, sondern in seine Prototypkette.

Damit es funktioniert, können Sie

Object.setPrototypeOf(hello, myEE) 

statt

Object.assign(hello, myEE) 
Verwandte Themen