[英]Check whether an object/function is defined (JavaScript, Safari issue)
[英]Is it possible to check whether a function is a javascript function or a developer defined function?
给定一个函数,我想知道它是开发人员定义的函数还是JavaScript引擎提供的内置函数。 可能吗?
对于开发人员定义的函数,我想跟踪其执行情况。
我自己有一个解决方案-使用valueOf method()。
valueOf方法返回一个表示函数源代码的字符串。 这将覆盖Object.valueOf方法。 JavaScript通常在后台调用valueOf方法,但是为了演示输出,以下代码首先创建一个名为Car的Function对象,然后显示该函数的值:
代码:function car(make,model,year){this.make = make,this.model = model,this.year = year} document.write(car.valueOf())
输出:function car(make,model,year){this.make =品牌,this.model =型号,this.year =年
使用内置的Function对象,valueOf方法将产生以下字符串:
输出:函数Function(){[本地代码]}。
从一般意义上讲,不是。 Javascript内置对象和函数不具有(或缺少)可以在运行时进行测试的任何特殊属性,以保证它不是开发人员定义的函数。 开发人员可以覆盖所有方法和对象。
您在自己的答案中提到的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
方法时将返回不同的结果,例如,某些移动浏览器将为任何函数对象返回相同的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.