1

在 JavaScript 中,假设您有:

function doSomething(callback) {
    if (callback instanceof Function) callback();
}

doSomething(function() {
    alert('hello world');
});

有没有办法检查“回调”内部的内容(例如,被调用的事实alert()doSomething()?就像是:

function doSomething(callback) {
    alert(callback.innards().indexOf('alert('));
}

我只是好奇

4

4 回答 4

2

Function.prototype.toString()给出一个implementation-dependent representation of the function. 然而,内置函数将返回如下内容:

function Array() {
   /* [native code] */
}

宿主方法可以返回任何东西,甚至抛出错误。所以严格的答案是肯定的,也许。但在实际意义上,它是不可靠的。

于 2012-05-24T01:53:44.833 回答
1

一些浏览器支持函数上的toString()

function doSomething(callback) {
    console.log( callback.toString().indexOf('alert(') )
    if (callback instanceof Function) callback();
}
于 2012-05-24T01:50:24.317 回答
0

你应该可以说:

alert( callback.toString().indexOf('alert(') );

但是,如果它恰好在字符串文字中,则不会区分 functionalert(的开头, function 的开头myspecialalert(和文本- 所以你可能需要做一些解析。"alert("

不确定这是如何跨浏览器的,但在 Firefox 中至少.toString()返回函数的整个文本,包括单词“function”和参数列表。

于 2012-05-24T01:51:06.843 回答
0
callback.toString().indexOf('alert(');

或者做一个正则表达式匹配,如:

/alert *\(/.test(callback.toString());
于 2012-05-24T01:52:24.597 回答