gpt4 book ai didi

javascript - 检测函数是否是浏览器原生的

转载 作者:行者123 更新时间:2023-12-03 02:30:16 27 4
gpt4 key购买 nike

我试图迭代网站中定义的所有全局变量,但这样做我也获得了 native 浏览器功能。

var numf=0; var nump=0; var numo=0; 
for(var p in this) {
if(typeof(this[p]) === "function"){
numf+=1;
console.log(p+"()");
} else if(typeof p != 'undefined'){
nump+=1;
console.log(p);
} else {
numo+=1;
console.log(p);
}
}

有没有办法确定函数是浏览器原生的还是在脚本中创建的?

最佳答案

您可以在方法上调用继承的.toString()函数并检查结果。 native 方法将有一个类似于 [native code] 的 block 。

if( this[p].toString().indexOf('[native code]') > -1 ) {
// yep, native in the browser
}
<小时/>

更新是因为很多评论者希望得到一些澄清,并且人们确实需要这样的检测。为了使这个检查真正节省,我们应该使用这样的行:

if( /\{\s+\[native code\]/.test( Function.prototype.toString.call( this[ p ] ) ) ) {
// yep, native
}

现在我们使用 Functionprototype 中的 .toString 方法,这使得其他脚本不太可能(如果不是不可能的话)覆盖 toString 方法。其次,我们使用正则表达式进行检查,这样我们就不会被函数体内的注释所欺骗。

关于javascript - 检测函数是否是浏览器原生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com