我总是遇到
检查一个
函数是否是本机代码的
情况。这是
功能测试的一个重要内容:函数是否是由
浏览器或是由第三方类库
模拟。
检测到这种最简单的
方法是,当然,判断价值的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) / /真的