2013-02-12 131 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

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

相關問題