2

假设我有一个函数a。我想知道它的内置功能还是用户定义的功能。
我尝试检查 a.toString() 是否包含[native code]在其中,但具有子字符串的用户定义函数[native code]会失败。有没有更好的方法来做到这一点?

4

2 回答 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

JS 小提琴演示

鉴于它也失败了'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 回答