おそらく変更および評価するために、文字列として特定の関数の定義を取得する方法はありますか?
-
07-07-2019 - |
質問
新しいコンテキスト、つまりスコープに存在しない特定の単語が定義されているコンテキストで関数を評価しようとしています。文字列として関数の定義があれば簡単ですが、次のように関数の通常のリストでこれを行う機能を提供したいと思います:
var funcs = {
first: function() { return 'yayaya'; },
second: function() { return 'okokok' + keyword; },
...
};
その後:
function Thing () {};
for (func in funcs) {
var definition = funcs[func].definition();
var keyword = "NOW I AM THE KEYWORD";
var actual_func_with_keyword_defined = eval(definition);
Thing.prototype[func] = actual_func_with_keyword_defined;
}
不足しているのは、関数のソースを返すdefinition()関数または同等の関数です。これはjavascriptで可能ですか?
解決
これは機能しますが、より長く、よりエレガントなソリューションがあると確信しています:
function foo() {
}
var bar = '' + foo; //type cast to a string by adding an empty string
alert(bar);
他のヒント
単に .definition()
を取り出してみてください。
JSの標準的な方法は、関数で toString()
を呼び出すことです。そのように:
function myFun() {}
myFun.toString() // gives "function myFun() {}",
// potentially with white space differences
所属していません StackOverflow