gpt4 book ai didi

JavaScript:使用不带运算符的构造函数 'new'

转载 作者:行者123 更新时间:2023-12-02 23:57:31 27 4
gpt4 key购买 nike

请帮助我理解为什么以下代码有效:

<script>
var re = RegExp('\\ba\\b') ;
alert(re.test('a')) ;
alert(re.test('ab')) ;
</script>

第一行没有 new 运算符。

据我所知, JavaScript 中的一个构造函数是一个初始化由运算符 new 创建的对象的函数,它们并不返回任何内容。

最佳答案

一般来说,如果某个东西被记录为构造函数,请对其使用 new 。但在本例中,RegExp 对于您将其作为函数调用的情况具有定义的“工厂”行为。请参阅 ECMAScript (JavaScript) specification 第 15.10.3 节(链接到即将发布的规范;新规范中的部分编号相同,您可以从 ECMA front page [右侧] 下载;我不想直接链接到 ~4MB PDF 文件):

15.10.3 The RegExp Constructor Called as a Function
15.10.3.1 RegExp(pattern, flags)
If pattern is an object R whose [[Class]] property is "RegExp" and flags is undefined, then return R unchanged. Otherwise call the RegExp constructor (15.10.4.1), passing it the pattern and flags arguments and return the object constructed by that constructor.

您实际上可以定义自己的 JavaScript 构造函数,以允许省略 new 关键字(通过检测它们已被作为函数调用,然后转身并正确调用自身),但我不会不建议这样做,因为它会导致误导性代码。 (而且你不能使用 class 语法来做到这一点,你必须使用旧的、更笨重的 function 语法。)

关于JavaScript:使用不带运算符的构造函数 'new',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928342/

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