有没有办法查看(匿名)函数?

时间:2012-05-24 01:46:16

标签: javascript functional-programming anonymous-function

在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 个答案:

答案 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());