关于javascript:fn regexp实例

fn instanceof RegExp

我一直盯着角度源代码(我经常这样做),我惊讶地看到以下检查:

1
2
3
4
5
if (isFunction(fn) && !(fn instanceof RegExp)) {

} else {
  // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
}

它是angular.bind实现的一部分。完整的代码片段可以在这里找到。

这是isFunction的实现(如果您想知道的话):

1
function isFunction(value) {return typeof value === 'function';}

现在,让我补充一下,以防万一:

我知道instanceof接线员做什么。它检查函数的原型(在本例中是RegExp.prototype)是否可以在从特定对象开始的原型链上找到。

现在,我的问题是:

你能给我一个例子,上面的代码将遵循else子句吗?我对表达式的第二部分很感兴趣,我知道如果不提供函数,可以使该条件失败。

那条评论警告我在IE中有一种奇怪的行为,但我不能复制它。


(P)In I7:(p)字母名称(P)However(in IE7):(p)字母名称(P)In IE9:(p)字母名称(P)In IE11:(p)字母名称


(P)In Netscape's original implementation,EDOCX1 penogical 0 objects were actually functions.EDOCX1和EDOCX1的英文字母2是用来表示同样的事情。In the Netscape and Mozilla Browsers,it was supported up through Firefox 4(released on March 22,2011).然而,EDOCX1,英文字母3,音符停止返回EDOCX1,英文字母4,音符0,目标甚至早期。(p)(P)这不是第一次黑暗时代遗留下来的问题,而是《角法典》中的新闻。这是另一个例子。角1.0.0 was released on June 13,2012.(p)