是否可以检查函数是javascript函数还是开发人员定义的函数?

时间:2010-04-14 04:19:53

标签: javascript function

给定一个函数,我想知道它是开发人员定义的函数还是JavaScript引擎提供的内置函数。有可能吗?

对于开发人员定义的函数,我想跟踪它的执行情况。

3 个答案:

答案 0 :(得分:3)

我自己有一个解决方案---使用valueOf方法()。

Copied and pasted the following

valueOf方法返回一个表示函数源代码的字符串。这将覆盖Object.valueOf方法。 valueOf方法通常由JavaScript在后台调用,但为了演示输出,下面的代码首先创建一个名为Car的Function对象,然后显示该函数的值:

代码: 功能车(品牌,型号,年份) {this.make = make,this.model = model,this.year = year} 文件撰写(car.valueOf())

输出: 功能车(品牌,型号,年份){this.make = make,this.model = model,this.year = year

使用内置的Function对象,valueOf方法将生成以下字符串:

输出: function Function(){[native code]}。

答案 1 :(得分:2)

一般而言,没有。 Javascript内置对象和函数没有(或缺少)可以在运行时测试的任何特殊属性,以保证它不是开发人员定义的函数。开发人员可以覆盖所有方法和对象。

答案 2 :(得分:2)

您在自己answer中提到的valueOf方法无法正常提及。

Function.prototype没有valueOf方法,它继承自Object.prototype,此方法只返回您调用它的相同函数对象:

Function.valueOf() === Function; // true

我认为您将它与toString方法混淆(或者您正在警告valueOf方法调用,这会导致大多数浏览器进行隐式ToString转换)。

但是,您可以直接在函数对象上使用toString方法,而在所有实现中将在函数体中返回包含"[native code]"的字符串表示,我不会推荐太多,因为Function.prototype.toString方法依赖于实现......

function isNative(fn) {
  return /native code/.test(fn.toString);
}

isNative(Function); // true
isNative(function () {}); // false

我再次告诉你,在函数上使用toString方法时,有些浏览器会返回不同的结果,例如,某些移动浏览器会为任何函数对象返回相同的字符串。