0

SO1、2、3 )にすでにいくつかの同様の質問があることは知っていますが、残念ながら、知識が限られJSているため、シナリオを個人のユースケースに外挿することはできません。したがって、この質問です。

次のコードを使用して、オブジェクトに動的にアタッチし、オブジェクトからいくつかの関数を呼び出すことができます。これは正常に機能します(で利用可能JsFiddle)。

JavaScript

$.extend(true, window, {
    "MyPlugin": {
        "dynamicFunction": dummy_function
     }                
});

function dummy_function() {

}

function real_function(string) {
    alert(string);
}

function dynamic_call(function_name, text) {
    MyPlugin["dynamicFunction"] = eval(function_name);
    MyPlugin["dynamicFunction"](text);
}​

HTML:

<button onClick="dynamic_call('real_function','some text');">click me</button>​

アップデート:

おかしなことに、関数のスコープがローカルであるという問題を再現しようとしていましたが、そうでない例を書き終えました:)(私はあなたJSが私のことではないと言いました)。したがって、私が解決しようとしていた問題を彼が推定したが提起しなかったため、window[function_name]私はを受け入れましたが、すべての答えは正しいです。James Allardice

を使用せずに同じ機能を実現するにはどうすればよいevalですか?

4

5 に答える 5

3

グローバルスコープの関数宣言はのプロパティになるwindowため、角括弧構文を使用できます。

function dynamic_call(function_name, text) {
    MyPlugin["dynamicFunction"] = window[function_name];
    MyPlugin["dynamicFunction"](text);
}​

関数がグローバルスコープにない場合は、それをあるオブジェクトのプロパティの値にすることができます。

var myFuncs = {
    real_function: function () {
        alert(string);
    }
};

次に、次を使用できます。

MyPlugin["dynamicFunction"] = myFuncs[function_name];
于 2012-07-13T13:13:33.510 に答える
2

eval関数のスコープがローカルである場合を除いて、これを行うことはできません。eval関数が何らかのオブジェクトのプロパティである場合にのみ、それを実行できます。これにはグローバルオブジェクトが含まれるため、グローバル関数は。なしで実行できますeval

グローバル関数またはオブジェクトのプロパティである関数を使用する場合:

MyPlugin["dynamicFunction"] = window[function_name];//window references global object
于 2012-07-13T13:13:22.520 に答える
1

real_functionがgloabl関数の場合は、

window[function_name](text);
于 2012-07-13T13:13:31.873 に答える
1

これが正確な質問ではないことはわかっていますが、次のように関数をパラメーターとして渡すことができる場合は、次のようになります。

<button onClick="dynamic_call(real_function,'some text');">click me</button>​

function dynamic_call(f, text) {
   MyPlugin["dynamicFunction"] = f;
   MyPlugin["dynamicFunction"](text);
}​
于 2012-07-13T13:13:43.927 に答える
1

を使用する代わりに、オブジェクトからのeval参照:function_namewindow

MyPlugin["dynamicFunction"] = window[function_name];
于 2012-07-13T13:13:48.153 に答える