我试图将一些es5代码转换为es6,无意中发现了下面的代码,我想知道是否可以用类的extends关键字替换util.inherits。我有点搞不懂他们是否做了同样的事。
ES5
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function TheEmitter() {
EventEmitter.call(this);
}
util.inherits(TheEmitter, EventEmitter);ES6
const EventEmitter = require('events').EventEmitter;
class TheEmitter extends EventEmitter {
...
}发布于 2017-05-28 11:04:02
由于class和extends关键字只是原型继承之上的语法糖,所以答案很简单:是的,您可以用extends代替util.inherits,并保持相同的行为。
当然,有一些次要的事情需要注意,例如,您需要确保在派生类的构造函数中调用super构造函数,而对于util.inherits,您必须调用构造函数函数并将其apply为this。但实际上,这些东西只是其他句法结构,在语义上,它们是等价的。
当然,还有一些实际问题,两种选择各不相同。例如,当使用Foo关键字定义class时,如果不使用new关键字,就不能调用Foo。没有class关键字,这是完全可能的(尽管没有意义,所以您不应该这样做)。
因此,长话短说:除了使用罕见而奇怪的构造(比如调用没有new的构造函数)之外,转换应该是无缝的。
https://stackoverflow.com/questions/44226524
复制相似问题