Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript RegExp隐式方法是否已弃用?_Javascript_Regex - Fatal编程技术网

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

JavaScript RegExp隐式方法是否已弃用?,javascript,regex,Javascript,Regex,所以每个人都知道我所说的“隐式方法”是什么意思?它们就像那些默认属性 从过去的Windows COM时代开始,您可以在其中键入 val = obj(arguments) 这将被解释为 val = obj.defaultMethod(arguments) 我刚刚发现JavaScript有同样的东西:RegExp对象的默认方法 显示为“exec”,如中所示 /(\w{4})/('yip jump man')[1] ==> jump 当RegExp对象被指定给变量时,甚至当 它是用RegE

所以每个人都知道我所说的“隐式方法”是什么意思?它们就像那些默认属性 从过去的Windows COM时代开始,您可以在其中键入

val = obj(arguments)
这将被解释为

val = obj.defaultMethod(arguments)
我刚刚发现JavaScript有同样的东西:RegExp对象的默认方法 显示为“exec”,如中所示

/(\w{4})/('yip jump man')[1]
==> jump
当RegExp对象被指定给变量时,甚至当 它是用RegExp构造函数创建的,而不是
/…/
,这是个好消息 对我们这些引用透明的粉丝来说

这是在哪里记录的,和/或它被弃用了吗?

这项功能是非标准的,一些实现,如Mozilla(Spidermonkey和Rhino)和Google Chrome(V8)包括它,但我强烈反对使用它,因为它不是规范的一部分

这些实现使
RegExp
对象可调用,调用这些对象相当于调用
.exec
方法

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

此外,在我看来,我不认为使用:

regexp(str);
与:

regexp.exec(str);

Mozilla对此略有记录。

好吧,所有函数都是对象,所以您可以这样做:

var obj = function () {
    alert('Doing my default!');
};
obj.prop1 = 'Hello world';
obj.prop2 = function () {
    alert('Other method');
};

obj(); // 'Doing my default!'
alert(obj.prop1); // 'Hello world'
obj.prop2(); // 'Other method'

在这两个方面都切中要害。谢谢我也不喜欢它,但我正在寻找弹药来捍卫我的观点。由于很少以交互方式键入JS代码,因此简短形式没有多大好处。@Eric有人发现很难理解您的评论,并就此提出了一个问题。如果你能顺道来看我就太好了。@NVZ,你太友好了。
var obj = function () {
    alert('Doing my default!');
};
obj.prop1 = 'Hello world';
obj.prop2 = function () {
    alert('Other method');
};

obj(); // 'Doing my default!'
alert(obj.prop1); // 'Hello world'
obj.prop2(); // 'Other method'