JavaScript RegExp隐式方法是否已弃用?

Eri*_*ric 2 javascript regex

所以每个人都知道"隐式方法"的意思吗?它们就像昔日Windows COM时代的那些默认属性,你可以输入类似的东西

val = obj(arguments)
Run Code Online (Sandbox Code Playgroud)

它将被解释为

val = obj.defaultMethod(arguments)
Run Code Online (Sandbox Code Playgroud)

我刚刚发现JavaScript有同样的事情:RegExp对象的默认方法似乎是'exec',如

/(\w{4})/('yip jump man')[1]
==> jump
Run Code Online (Sandbox Code Playgroud)

这甚至可以在将RegExp对象分配给变量时使用,甚至在使用RegExp构造函数创建它时,而不是/.../,这对我们的粉丝来说是参考透明度的好消息.

这在哪里记录,和/或是否已被弃用?

CMS*_*CMS 6

这个功能是非标准的,一些实现,如Mozilla(Spidermonkey和Rhino)和谷歌Chrome(V8)包含它,但我会高度反对它的使用,因为它不是规范的一部分.

这些实现使RegExp对象可调用,并且调用这些对象等同于调用该.exec方法.

在Chrome(和Firefox 2.x)中,即使您将typeof操作符与RegExp对象一起使用,也会得到"function"(因为它们实现了[[Call]]内部方法).

typeof /foo/ == "function"; // true
Run Code Online (Sandbox Code Playgroud)

IMO我也没有看到使用的好处:

regexp(str);
Run Code Online (Sandbox Code Playgroud)

与:

regexp.exec(str);
Run Code Online (Sandbox Code Playgroud)

Mozilla 此略微记录这一点.