2011-02-15 152 views
1
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; 
+2

請添加上下文。 – SLaks 2011-02-15 04:13:23

回答

5

它根據JS引擎是否在Function.prototype.toString()中包含函數的源代碼來選擇正則表達式。

該正則表達式用於檢查函數是否使用類方法_super;如果知道該功能不使用_super,則包裝器不需要創建super
如果Function.prototype.toString()不返回源,包裝被強制假設函數總是使用_super;因此,/.*/,這將永遠匹配。

+0

我覺得你是對的,我要消化它。 – island205 2011-02-15 04:53:27

0

測試使用的方法_super至少可以說的高度混淆的方式。

注意,對於第二個「始終通過」情況下/.*/一個微不足道的改進是,以除去貪婪正則表達式匹配*,使得只有第一個字符匹配。新的正則表達式將是:/.?/