首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用ES6的extend关键字替换util.inherits吗?

我可以用ES6的extend关键字替换util.inherits吗?
EN

Stack Overflow用户
提问于 2017-05-28 11:01:10
回答 1查看 1.5K关注 0票数 5

我试图将一些es5代码转换为es6,无意中发现了下面的代码,我想知道是否可以用类的extends关键字替换util.inherits。我有点搞不懂他们是否做了同样的事。

ES5

代码语言:javascript
复制
var EventEmitter = require('events').EventEmitter;
var util = require('util');

function TheEmitter() {
    EventEmitter.call(this);
}
util.inherits(TheEmitter, EventEmitter);

ES6

代码语言:javascript
复制
const EventEmitter = require('events').EventEmitter;

class TheEmitter extends EventEmitter {
   ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 11:04:02

由于classextends关键字只是原型继承之上的语法糖,所以答案很简单:是的,您可以用extends代替util.inherits,并保持相同的行为。

当然,有一些次要的事情需要注意,例如,您需要确保在派生类的构造函数中调用super构造函数,而对于util.inherits,您必须调用构造函数函数并将其applythis。但实际上,这些东西只是其他句法结构,在语义上,它们是等价的。

当然,还有一些实际问题,两种选择各不相同。例如,当使用Foo关键字定义class时,如果不使用new关键字,就不能调用Foo。没有class关键字,这是完全可能的(尽管没有意义,所以您不应该这样做)。

因此,长话短说:除了使用罕见而奇怪的构造(比如调用没有new的构造函数)之外,转换应该是无缝的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44226524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档