Javascript检查一个函数是否是本机代码。

我总是遇到检查一个函数是否是本机代码的情况。这是功能测试的一个重要内容:函数是否是由浏览器或是由第三方类库模拟。检测到这种最简单的方法是,当然,判断价值的ToString方法,函数返回。

Javascript代码

判断一个函数是否是本机方法是相当简单的。


要确定主函数是否
功能是本地的(FN){
例:
( / /警报。toString)
函数(警报),本地代码}
使用+/C的隐式类型转换。
返回(本地代码);
}


实现的原则是将函数转换为字符串表示形式,并执行正则匹配。

升级版本,更新!


(函数(){())

ToString / /对象的方法,用于内部处理传入的参数值(内部)` { {类} } `
VaR方法= object.prototype.tostring;

ToString /功能的原始方法,用于反编译功能代码的处理
无功fntostring = function.prototype.tostring;

用于检测宿主对象构造函数(宿主构造函数),
(Safari > 4;真正的输出特定数组,真正键入特定数组)
无功rehostctor = / ^ {对象。+构造函数 } $ /;

对正则表达式/本地方法将被编译成一个固定模板的使用。
/ /使用`对象# toString `因为他不会被污染
var = regexp(renative + ^
`对象# toString `会变成一串强/
字符串(字符串)
与所有正则表达式相关的特殊字符
更换( / {。* + ^美元(| { } { } / } / g), $')
为了保持通用 / /模板,更换` toString ` `。* `
…字符替换、兼容犀牛环境,因为它们会有附加信息、参数数等方法。
更换( / toString |(功能)*(为)= (| 1(= })/ g,1美元。)
结束
+ $
);

功能是本地的(值){
类型/判断
变量类型=类型的值;
返回类型= = 'function
使用`功能# toString `方法调用本地 / /,
价值` toString ` / /而不是他的方法,
以避免被虚假的。
renative.test(fntostring.call(值))
/ /如果类型是not'function,
您需要检查主机对象(主机对象)),
由于某些(浏览器)环境将数组事物作为DOM方法输入
此时本机正常模式可能与标准不匹配。
(价值:类型= 'object' rehostctor.test(tostring.call(值))假| |);
};

/ /原产可以分配到你想要的变量/对象
window.isnative =原产;
}();



原产(原产) / /假
原产(警戒) / /真的
window.isnative(窗口。原产) / /假
window.isnative(窗口。警报) / /真的
window.isnative(string ToString) / /真的