在我们的开发
工作往往需要确定一个
函数是Javascript的主要
作用,有时是非常必要的工作,你需要知道这个
功能是通过
浏览器本身提供,或第三方,形成最初的迷彩包功能。当然,最好的办法是看toString
方法执行函数的返回值。
Javascript
完成这项
任务的方法非常简单:
复制代码代码如下所示:
功能是
本地的(FN){
返回(本地代码);
}
toString方法返回的字符串形式的方法,然后使用正则表达式来判断角色中。
更强悍的方法
John David Dalton,lodash的创始人,找到了一个更好的
解决方案:
复制代码代码如下所示:
(函数(){())
用于解析内部的值
VaR方法= object.prototype.tostring;
用于解决反编译的源/功能
无功fntostring = function.prototype.tostring;
要检测主机使用的构造函数(Safari真的键入数组> 4;具体)
无功rehostctor = / ^ {对象。+构造函数 } $ /;
编译一个正则表达式使用公共/本地方法作为模板。
我们选择了`对象# toString `因为有 / OD的机会不被搞砸了。
var = regexp(renative + ^
`对象# toString `一连串 / /强迫
字符串(字符串)
任何特殊字符 / /逃避规则
更换( / {。* + ^美元(| { } { } / } / g), $')
对` toString ` / /
替换提到保持模板的通用。*
像'替换'来
支持像犀牛这样的环境…添加额外信息
作为方法的差异。 /此类
更换( / toString |(功能)*(为)= (| 1(= })/ g,1美元。*)+$
);
功能是本地的(值){
变量
类型=类型的值;
返回类型= = 'function
使用`功能# toString `绕过价值 /自己` ` toString方法
避免伪造。
renative.test(fntostring.call(值))
回退到主机对象,因为某些环境将表示
像类型数组一样作为DOM /方法的东西可能不符合
本地
模式。正常
(价值:类型= 'object' rehostctor.test(tostring.call(值))假| |);
}
但是,您希望导出
module.exports =原产;
}();
现在你看到它了,非常复杂,但功能更强大。当然,这不是为了安全
保护,它只是提供了关于它是否是本机函数的信息。