gpt4 book ai didi

javascript - 我如何以及为什么要编写一个扩展 null 的类?

转载 作者:IT王子 更新时间:2023-10-29 02:56:26 27 4
gpt4 key购买 nike

JavaScript 的 class syntax ,添加到 ES6 中,显然使 extend null 合法:

class foo extends null {}

一些谷歌搜索显示它 was suggested on ES Discuss此类声明是错误的;然而,其他评论者认为他们应该合法,因为

someone might want to create a class that has a {__proto__: null} prototype

最后,争论的一方占了上风。

我无法理解这个假设的用例。一方面,虽然这样一个类的声明是合法的,但实例化以这种方式声明的类似乎是不合法的。尝试在 Node.js 或 Chrome 中从上面实例化类 foo 给我一个非常愚蠢的错误

TypeError: function is not a function

在 Firefox 中做同样的事情给了我

TypeError: function () {
} is not a constructor

如 MDN 的当前功能示例所示,在类上定义构造函数无济于事;如果我尝试实例化此类:

class bar extends null {
constructor(){}
}

然后 Chrome/Node 告诉我:

ReferenceError: this is not defined

Firefox 告诉我:

ReferenceError: |this| used uninitialized in bar class constructor

这些疯狂的东西是什么?为什么这些空扩展类不可实例化?鉴于它们不可实例化,为什么在规范中故意保留创建它们的可能性,以及为什么一些 MDN 作者认为它是 noteworthy enough to document ?此功能有哪些可能的用例?

最佳答案

编辑(2021 年):TC39,它指定 JavaScript 仍未准确解决它应该如何工作。这需要在浏览器可以一致地实现它之前发生。可以关注最新的努力here .


原始答案:

实例化这些类是为了工作; Chrome 和 Firefox 只是有 bug。 Here's Chrome ,here's火狐的。它在 Safari 中运行良好(至少在 master 上)。

曾经有一个bug在使它们无法实例化的规范中,但它已经修复了一段时间。 (有一个相关的 still,但这不是您所看到的。)

用例与 Object.create(null) 大致相同。有时您想要一些不继承自 Object.prototype 的东西。

关于javascript - 我如何以及为什么要编写一个扩展 null 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189190/

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