通常我会创建一个类并使用es6类扩展它
但这次我只是一个常规功能,我想将EventEmitter添加到
function hello(){
return 'world';
}
hello(); // world
该函数不是构造函数,不应使用new
调用。现在我还希望将EventEmitter属性添加到此函数中(非常类似于jquery' s $
,它既是函数又是对象)
我将如何实现这一目标?
我正在考虑以下方面:
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
但这不起作用。你有什么建议吗?
希望有一个更好的方法,然后为hello.on = myEE.on
做所有事件的属性
答案 0 :(得分:1)
您的示例不起作用,因为您要查找的所有方法(例如on
)不存在于对象本身中,而是存在于其原型链中。
要使其有效,您可以
Object.setPrototypeOf(hello, myEE)
而不是
Object.assign(hello, myEE)