2011-04-09 4 views
1

나는 기능이 방법구축 JS 함수 이름은 동적으로

redBall(this); 

전화를 원하지만 동적으로 문자열에서 구축하고자합니다. 이런 식으로 시도했지만 작동하지 않습니다.

var color = 'red'; 
color+'Ball'(this); 

답변

5

이 같은 것을 할 수있는 :

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); 
+0

당신은 ballFunctions [ 'myNewFunction'] = 기능 '할 수있는 ... : –

+0

고마워, 이건 정말 해보 았는데. – jarn

4

동적이라는 기능이 좋은 연습하지 않습니다 . 이건 어때? Ball('red', this);

+0

+1. 좋은 선택 - 나는이 대답을 좋아한다. –

+0

모든 기능을 수행하는 기능은 그다지 실용적이지 않습니다. – icktoofay

+0

나는 여전히 동적 함수 이름이 거기에 논리를 구현하는 나쁜 방법이라고 말하고 싶습니다. 다른 함수 호출이나 Rfvgyhn과 같은 switch 문은 (입력하기 어렵습니다) 훨씬 더 유지 보수가 쉬운 코드를 생성 할 것입니다. –

5

첨자 암시 적 window 객체를 : 다음

function Ball(color, object) 
{ 
    // do stuff 
} 

그리고 통해 전화를 귀하의 예는 문자열은 때로 믿을 수 있기 때문에 이해가되지 않습니다 문자열 'Ball'을 (를 호출하려고 시도했습니다

window[color + 'Ball'](this) 

'callable'), 결과를 color과 연결하십시오.() {

window[color + 'Ball'](this); 
+0

+1 약 40 초 정도 나를 이겼다. – JAAulde

+0

@JAAulde : 고마워. 위대한 마음은 비슷하게 생각합니다 ;-) – Cameron

+0

@jarn : 글쎄,이 오류는 'redBall'이 전역 네임 스페이스 (즉, 'window' 개체)의 함수가 아니라는 것을 의미합니다. 정의 된 위치는 어디입니까? 다른 함수 안에 있습니까? 가장 중요한 것은, 당신의 맥락에서'이'무엇입니까? – Cameron

1

은이를 사용할 수 있습니다 (I 세계적 범위가 가정) 기존 코드에 대한 수정을 방지하기 위해 }`
+1

그러면 실제 코드를 반영하는 코드와 더 많은 코드를 보여야합니다. – JAAulde

관련 문제