假设我有一个函数a。我想知道它的内置功能还是用户定义的功能。
我尝试检查 a.toString() 是否包含[native code]
在其中,但具有子字符串的用户定义函数[native code]
会失败。有没有更好的方法来做到这一点?
问问题
72 次
2 回答
1
一种可能是幼稚的方法是测试函数名称是否存在文档的属性:
function newFunction (){
return true;
}
console.log('newFunction' in document, 'toString' in document);
当然,这并没有经过详尽的测试,如果函数是作为 a 的扩展创建的,则确实会失败prototype
,例如:
function newFunction (){
return true;
}
Object.prototype.newFunctionName = function () {
return 10 * 2;
};
console.log('newFunction' in document, 'toString' in document, 'newFunctionName' in document); // false, true, true
鉴于它也失败了'eval' in document
(因为它返回false
),那么这将或可以仅用于识别对象的原型方法。这充其量是一个不完整的解决方案。
于 2013-10-26T17:30:20.520 回答
1
所以,这里有一些代码要检查:
var rgx = /\[native code\]\s*\}\s*$/;
function some(){
'[native code]'
}
console.log(
rgx.test(print.toString()),
rgx.test(some.toString())
);
于 2013-10-26T18:09:16.960 回答