我有一個「主對象」 System
含有稱爲System.Test
方法。它接受,例如,三個參數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在一個名爲id
(= 1,2,3 ...)的變量中。我嘗試在循環中使用此代碼。
User[X].Test = function(a, b) {
return System.Test(X, a, b);
}
但是,這並不按預期方式工作。在調用用戶[X] .Test()時,它只是傳遞到System.Test
函數循環中的最後一個鍵X,而不是每個用戶[X]對象唯一的X.
的醜陋的方式 - 問題
的解決方案似乎相當簡單,如果我可以使用EVAL。
eval("User[X].Test = function(a, b) { return System.Test(" + X + ", a, b); }");
現在,這可以作爲黑客工作。但是.Test
只是一個例子,並且我無法想象一旦方法的數量增加,就會使用數十個調用。儘管在eval中注入的唯一變量是X
(並且我可以保證X
在內部生成並且完全安全 - 沒有惡意代碼執行風險) - 使用eval使我感到不安。有沒有更好的方法來做到這一點,我不知道?謝謝。
偉大的作品,謝謝!如果我想使用類似於.bind()的函數來追加**參數,該怎麼辦?或者是太麻煩了,我應該簡單地統一一切來預先考慮'X'? –
請注意,某些舊瀏覽器(例如IE8)沒有'Function.prototype.bind()'。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Browser_compatibility – Mics
您可以將其包裝在一個匿名函數中,該函數需要更多參數並調用其他函數。 – elclanrs