シナリオ
System
というメソッドを含む「メインオブジェクト」がありますSystem.Test
。たとえば、3 つの引数を受け入れますSystem.Test(id, a, b)
。
これで、メソッドも利用できるようにしたい多くのオブジェクト ( User[1]
、User[2]
、 ...) ができました。ただし、渡す引数は各オブジェクトに固有であり、修正する必要があります。たとえば、呼び出すと、自動的に にマップされます。User[3]
.Test
id
User[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 の使用は私をゾッとさせます。私が知らないこれを行うためのより良い方法はありますか?ありがとう。X
X