gpt4 book ai didi

javascript - 我可以用 es6 的 extend 关键字替换 util.inherits 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:41 24 4
gpt4 key购买 nike

我正在尝试将一些 es5 代码转换为 es6,我偶然发现了以下代码,我想知道是否可以将 util.inherits 替换为 extends 关键字上课。如果他们做同样的事情,我有点困惑。

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 {
...
}

最佳答案

由于 classextends 关键字只是原型(prototype)继承之上的语法糖,答案很简单:是的,您可以替换 util.inherits 通过扩展 并保持相同的行为。

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

当然,还有一些实际问题,两个选项彼此不同。例如,当使用 class 关键字定义 Foo 时,如果不使用 new 关键字就不能调用 Foo。如果没有 class 关键字,这是完全可能的(虽然没有意义,所以无论如何你都不应该这样做)。

所以,长话短说:除了一些只有在使用罕见和奇怪的构造时才会发生的奇怪效果(比如在没有 new 的情况下调用构造函数),过渡应该是无缝的。

关于javascript - 我可以用 es6 的 extend 关键字替换 util.inherits 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44226524/

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