首页 > 解决方案 > Why I am I unable to instantiate eventEmitter obj using the code below

问题描述

I have an error instantiating eventEmitter object with the below syntax:

const events=new require('events').EventEmmiter();// throws error

But the next method works:

const events=require('events');
const myEvent=new events.EventEmmiter();// no error

I expect that an object is created but I am facing the below error

TypeError: (intermediate value).EventEmmiter is not a function

What's going on, and how do I fix it?

标签: node.js

解决方案


new与成员 access 具有相同的优先级.,并且从左到右进行评估,因此:

const events = new require('events').EventEmitter(); // throws error

就好像

const events = (new require('events')).EventEmitter(); // throws error

类似地,您可以对 DOMParser 进行实例化并立即调用实例的方法 (parseFromString),而无需任何分组括号:

const doc = new DOMParser().parseFromString('<div>foo<div>', 'text/html');
// equivalent to
//const doc = (new DOMParser()).parseFromString('<div>foo<div>', 'text/html');

这是错误的,因为您想require作为普通函数调用,而不是使用new- 您想new使用EventEmitter调用。

require您可以通过在to中加上括号来修复它EventEmitter,以便您可以EventEmitter使用以下命令调用构造函数new

const events = new (require('events').EventEmitter)();

(确保拼写也正确)


推荐阅读