gpt4 book ai didi

javascript - Node.js 与新运算符的调用之间的区别

转载 作者:行者123 更新时间:2023-11-30 08:37:40 26 4
gpt4 key购买 nike

为什么这两个变量 (1) 和 (2) 不等价:

    var EventEmitter = require('events').EventEmitter;

(1) var ee = new EventEmitter();

(2) var ee = new require('events').EventEmitter();

变量 (1) 和 (2) 不一样,我不明白为什么会这样。

然而,这两个是等价的(a)和(b):

   var EventEmitter = require('events').EventEmitter;

(a) var ee = new EventEmitter();

(b) var ee = new (require('events').EventEmitter)();

有人可以解释这是为什么吗?

最佳答案

已更新

这里有两件事。

1。使用 EventEmitter API

我想你是在问为什么 ee1 !== ee2 使用 API。

它们是不同的,因为 API让我们创建任意数量的 EventEmitter。

这让您拥有一个用于多个套接字、流、数据库连接或任何您需要的 EventEmitter。

您可以将 new EventEmitter() 视为淘汰 EventEmitter 的工厂

2。如果你问的是这个特定的代码,那么第二个版本中有一个错误。

错误是由于 JavaScript's Operator Order .

Tl;DR,对于单行 new,您需要 () 围绕 .:

var ee4 = new (require('events').EventEmitter);
( . ) <-- do . before new

问题在于 new. 具有相同的优先级,因此从左到右计算。该优先级将其置于 . 运算符之上或之下 require('events') 之后。

这段代码帮助我更好地理解node test.js:

var EventEmitter = require('events').EventEmitter;
console.log('require(\'events\').EventEmitter: ' + EventEmitter);

// Works
var ee1 = new EventEmitter;
console.log('ee1: new EventEmitter: ' + ee1);

// Works
var ee1a = new EventEmitter();
console.log('ee1a: new EventEmitter(): ' + ee1a);

// Desn't work. Appears to be the constructor.
var ee2 = new require('events').EventEmitter;
console.log('ee2: new require(\'events\').EventEmitter: ' + ee2);

// Doesn't work. Undefined
var ee3 = new require('events').EventEmitter();
console.log('ee3: new require(\'events\').EventEmitter(): ' + ee3);

// Works. 'one-liner'
var ee4 = new (require('events').EventEmitter);
console.log('ee4: new (require(\'events\').EventEmitter): ' + ee4);

// Works. 'one-liner' with parameters
var ee4a = new (require('events').EventEmitter)();
console.log('ee4: new (require(\'events\').EventEmitter)(): ' + ee4a);

// Doesn't work. Undefined
var ee5 = require('events').EventEmitter();
console.log('ee5: require(\'events\').EventEmitter(): ' + ee5);

关于javascript - Node.js 与新运算符的调用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29956855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com