在JavaScript中,假设你有:
function doSomething(callback) {
if (callback instanceof Function) callback();
}
doSomething(function() {
alert('hello world');
});
有没有办法从alert()
检查“回调”内部的内容(例如,doSomething()
被调用的事实)?类似的东西:
function doSomething(callback) {
alert(callback.innards().indexOf('alert('));
}
我只是好奇
答案 0 :(得分:2)
Function.prototype.toString()提供implementation-dependent representation of the function
。但是内置函数将返回如下内容:
function Array() {
/* [native code] */
}
并且宿主方法可以返回任何内容,甚至抛出错误。所以严格的答案是肯定的,也许吧。但从实际意义上讲,它并不可靠。
答案 1 :(得分:1)
有些浏览器支持toString()功能。
function doSomething(callback) {
console.log( callback.toString().indexOf('alert(') )
if (callback instanceof Function) callback();
}
答案 2 :(得分:0)
你应该可以说:
alert( callback.toString().indexOf('alert(') );
但是,如果它恰好位于字符串文字中,则不会区分函数alert(
的开头,函数myspecialalert(
的开头和文本"alert("
- 所以你可能需要做一些解析。
不确定跨浏览器是怎么回事,但在Firefox中,至少.toString()
会返回函数的全文,包括单词“function”和参数列表。
答案 3 :(得分:0)
callback.toString().indexOf('alert(');
或者执行正则表达式匹配,如:
/alert *\(/.test(callback.toString());