我总是经常碰到需要检查某个function是否是原生代码的情况 —— 这是功能测试中一个很重要的内容: 函数是浏览器内置支持的,还是通过第三方类库模拟的。要检测这一点,最简单的办法当然是判断函数的 toString 方法返回的值啦。
JavaScript代码
判断函数是否是原生方法其实相当简单:
// 判断是否原生函数 function isNative(fn) { // 示例: // alert.toString() // "function alert() { [native code] }" // '' + fn 利用了js的隐式类型转换. return (/\{\s*\[native code\]\s*\}/).test('' + fn); }
将函数转换为字符串表示的形式,并且执行正则匹配,这就是实现的原理。
升级版,Update!
;(function() { // 取得Object的toString方法,用于处理传入参数value的内部(internal) `[[Class]]` var toString = Object.prototype.toString; // 取得原始的Function的toString方法,用于处理functions的反编译代码 var fnToString = Function.prototype.toString; // 用于检测 宿主对象构造器(host constructors), // (Safari > 4; 真的输出特定的数组,really typed array specific) var reHostCtor = /^\[object .+"htmlcode">isNative(isNative) //false isNative(alert) //true window.isNative(window.isNative) //false window.isNative(window.alert) //true window.isNative(String.toString) //true
标签:
JavaScript,原生函数
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com
暂无“JavaScript中判断原生函数检查function是否是原生代码”评论...