2013-02-12 92 views
0

我遇到了一篇由john resig解释JavaScript继承的文章。 http://ejohn.org/blog/simple-javascript-inheritance/任何人都可以解释这个正则表达式

在这篇文章中有在起跑线上具有正则表达式

fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; 

任何一个可以告诉我这个是什么意思一个类实现代码?

+2

搜索“正则表达式解释器”。 – 2013-02-12 17:03:22

+0

它根据xyz.test的结果为fntest分配一个正则表达式。除此之外,你可以在浏览器的JS控制台中轻松地玩这个,并从那里找出它。 – 2013-02-12 17:05:25

+1

@pst:这个比这更简单。代码的目的似乎是如果函数计算结果为true,则返回'_super';如果计算结果为false,则返回'。*'。 – 2013-02-12 17:05:34

回答

3

fnTest用于检查方法是否在某处使用_super。要做到这一点,该函数将根据正则表达式(在// Copy the properties over onto the new prototype中)隐式转换为字符串(toString)和​​。

但是,并不是所有的实现方法在调用toString方法时真的会产生函数的源代码。因此,此测试检查function(){xyz;}是否可以针对包含xyz进行测试 - 如果不是,则始终使用/.*/代替/\b_super\b/

1

有两个正则表达式。第一个是/xyz/,用于测试函数(强制为字符串)是否匹配xyz。它的确如此。然后,返回两个regexen中的一个(在这种情况下,第一个是因为测试通过)。

其中第一个是字边界,后跟_super后跟另一个字边界,它至少可以匹配"_super"," _super "word._super

第二个匹配零个或多个字符(即所有内容)。

相关问题