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(') );

alert(ただし、それは functionの開始、 function の開始、および文字列リテラルにある場合myspecialalert(のテキストを区別しません。そのため、少し解析が必要になる場合があります。"alert("

これがどの程度クロスブラウザーなのかはわかりませんが、Firefox では、少なくとも.toString()「関数」という単語とパラメーター リストを含む関数のテキスト全体を返します。

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

または、次のような正規表現一致を実行します。

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