代码描述:js判断函数。js判断函数代码实例
本章节介绍一下如何判断一个函数是内置的还是用户自定义的,这个在实际编码中也是有需求的。 代码实例如下:
<script> function isNative(fn){ return (/\\{\\s*\\[native code\\]\\s*\\}/).test(''+ fn); } console.log(isNative(String.toString)); </script>
上面的代码实现了我们的要求,原理也非常的简单,如下代码:
<script> ;(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 .+?Constructor\\]$/; // 使用RegExp将常用的native方法编译为正则模板. // 使用 `Object#toString` 是因为一般他不会被污染 var reNative = RegExp('^' + // 将 `Object#toString` 强转为字符串 String(toString) // 对所有正则表达式相关的特殊字符进行转义 .replace(/[.*+?^${}()|[\\]\\/\\\\]/g, '\\\\$&') // 为了保持模板的通用性,将 `toString` 替换为 `.*?` // 将`for ...`之类的字符替换,兼容Rhino等环境,因为他们会有额外的信息,如方法的参数数量. .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') // 结束符 + '$'); function isNative(value){ // 判断 typeof var type = typeof value; return type == 'function' // 使用 `Function#toString`原生方法来调用, // 而不是 value 自己的 `toString` 方法, // 以免被伪造所欺骗. ? reNative.test(fnToString.call(value)) // 如果type 不是'function', // 则需要检查宿主对象(host object)的情形, // 因为某些(浏览器)环境会将 typed arrays 之类的东西当作DOM方法 // 此时可能不匹配标准的Native正则模式 : (value && type == 'object' && reHostCtor.test(toString.call(value))) || false; }; // 可以将 isNative 赋值给你想要的变量/对象 window.isNative = isNative; }()); </script>
请绑定手机号,在继续操作
注意:只有绑定手机以后,才可使用网站全部功能