我试图迭代网站中定义的所有全局变量,但这样做时我也获得了本机浏览器功能。
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 code]
.
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
}
现在我们正在使用.toString
方法从prototype
of Function
这使得其他脚本覆盖的可能性非常小(如果不是不可能的话)toString
方法。其次,我们使用正则表达式进行检查,这样我们就不会被函数体内的注释所迷惑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)