将类属性添加到常规函数

时间:2016-12-07 15:18:15

标签: javascript node.js function events

通常我会创建一个类并使用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做所有事件的属性

1 个答案:

答案 0 :(得分:1)

您的示例不起作用,因为您要查找的所有方法(例如on)不存在于对象本身中,而是存在于其原型链中。

要使其有效,您可以

Object.setPrototypeOf(hello, myEE)

而不是

Object.assign(hello, myEE)