関数の名前を外部から取得する方法はありますか?
Web ページに js スクリプトがあり、それを変更することはできず、読み取るだけであるとします。スクリプトには、オブジェクトと関数を含むオブジェクトが含まれています。「HelloWorld」という名前の関数を見つけたいとしましょう。
firebug では、次のようなスクリプトでこれらのオブジェクトとメソッドをループします。
// Parameter is target object.
function getFunctionNames(obj) {
// For each objects / functions
for (var id in obj) {
// Focus only on functions
if (typeof(obj[id]) == "function") {
// Get name of the function.
// console.log("Function: " + obj[id].toString());
// Code above returns a block of code without the name. Example output:
// Function: function(name) { alert("Hello World! Hello " + name + "!"); }
//
// Expected output would be
// Function: HelloWorld
}
}
}
- obj[id].toString()は、名前の代わりにコードのブロックを返します。
- obj[id].nameは空の文字列を返します。無名関数(?)。
- ターゲット コードを変更できないため、arguments.callee.nameを使用できません。
firebug でオブジェクトや関数をブラウズしたり、ソース コードを読んだりすることもできますが、Javascript でそれを行う方法を探しています。
編集
実際の例については、Youtubeにアクセスして、Javascript を介して「yt」オブジェクトから関数「setMsg()」の名前を取得してみてください。
編集2
私が探していたものにちょっと近いというサイモンの答えを受け入れます。関数名ではなく、変数名を探していたようです。答えは元の問題では役に立ちませんでしたが、元の質問には確かに答えました。Paul Draper のコメントのおかげで、正しい方向に進むことができました。
ありがとう!