检测函数是否是Javascript本机函数的一种小技术。

检测函数是否是Javascript本机函数的一种小技术。
在我们的开发工作往往需要确定一个函数是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 =原产;

}();
现在你看到它了,非常复杂,但功能更强大。当然,这不是为了安全保护,它只是提供了关于它是否是本机函数的信息。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部