我要調用一個函數這樣構建js函數名稱動態
redBall(this);
,但我想從一個字符串動態構建。我嘗試過這樣的東西,但它不起作用。
var color = 'red';
color+'Ball'(this);
我要調用一個函數這樣構建js函數名稱動態
redBall(this);
,但我想從一個字符串動態構建。我嘗試過這樣的東西,但它不起作用。
var color = 'red';
color+'Ball'(this);
你可以做這樣的事情:
var ballFunctions = {
redBall: function(obj) {
alert("Hi, I'm a red ball");
},
blueBall: function(obj) {
alert("Hi, I'm a blue ball");
}
};
color = "red";
ballFunctions[color + "Ball"](this);
color = "blue";
ballFunctions[color + "Ball"](this);
function ball(color, obj) {
ballFunctions[color + "Ball"](obj);
// Or use the window object if your funcs are in the global namespace like Cameron said
// window[color + "Ball"](obj);
}
color = "red";
ball(color, this);
動態命名的功能是不是一個偉大的實踐。那這個呢?
function Ball(color, object)
{
// do stuff
}
,然後通過調用它:Ball('red', this);
+1。不錯的選擇 - 我喜歡這個答案。 – 2011-04-09 01:23:32
做任何事情的功能都不是很好的做法。 – icktoofay 2011-04-09 01:24:08
我仍然會說動態函數名是一種不好的方法來實現那裏的邏輯。帶有其他函數調用的switch語句或者像Rfvgyhn(很難輸入)的方法可能會產生更多可維護的代碼。 – 2011-04-09 01:29:57
標隱含window
對象:
window[color + 'Ball'](this)
你舉的例子試圖調用字符串'Ball'
(這是沒有意義的,因爲串AREN可調用),然後連接結果color
- 不完全是你想要的。
爲了避免對現有代碼進行任何修改(我假設是全球範圍的),你可以使用這個:
window[color + 'Ball'](this);
你必須展示更多的代碼,然後才能反映實際的上下文。 – JAAulde 2011-04-09 01:54:04
,你可以做'ballFunctions [「myNewFunction」] =函數(){... }' – 2011-04-09 01:23:31
謝謝,我嘗試過之後確實有效。 – jarn 2011-04-09 01:55:42