0

シナリオ

Systemというメソッドを含む「メインオブジェクト」がありますSystem.Test。たとえば、3 つの引数を受け入れますSystem.Test(id, a, b)

これで、メソッドも利用できるようにしたい多くのオブジェクト ( User[1]User[2]、 ...) ができました。ただし、渡す引数は各オブジェクトに固有であり、修正する必要があります。たとえば、呼び出すと、自動的に にマップされます。User[3].TestidUser[X]User[1].Test(a, b)System.Test(1, a, b)

これまでに行ったこと

User[X]オブジェクトの量は可変です。idそれぞれをループしていて、 (=1, 2, 3...)という変数に ID があるとします。ループ内でこのコードを使用してみました。

User[X].Test = function(a, b) {
    return System.Test(X, a, b);
}

ただし、これは期待どおりには機能しません。User[X].Test() が呼び出された時点で、各 User[X] オブジェクトに固有の X ではなく、ループ内の最後のキー X がSystem.Test関数に渡されるだけです。

醜い方法 - 問題

evalを使用できれば、解決策はかなり簡単に思えます。

eval("User[X].Test = function(a, b) { return System.Test(" + X + ", a, b); }");

さて、これはハックとして機能する可能性があります。しかし、これはほんの一例であり、メソッドの量が増えるとすぐに数十回のeval.Test呼び出しを使用することは想像できません。evalに注入される唯一の変数は(そして、それが内部で生成され、完全に安全であることを保証できます- 悪意のあるコードが実行されるリスクはありません) - eval の使用は私をゾッとさせます。私が知らないこれを行うためのより良い方法はありますか?ありがとう。XX

4

1 に答える 1

0

bind部分的な適用に使用できます。

User[X].Test = System.Test.bind(null, X);
于 2013-07-17T05:47:34.727 に答える