2011-10-04 6 views

답변

22

그냥과 같이, object[functionName]();의 구조를 사용합니다 : 예를 들어

function Person() {}; 
Person.prototype.speak = function() { alert('ohai'); }; 
var john = new Person, action = 'speak'; 

john[action](); 

대체 스타일 :

var Person = { 
    speak: function() { alert('ohai'); }, 
    speakDelegate: function() { var action = 'speak'; this[action](); } 
}; 
Person.speakDelegate(); 
+0

this.apply (FUNC)를하지 않는 것 그게 틀린가? – Wesley

+0

답을 업데이트했습니다. 그래도 충분하지 않다면 우리에게 자세한 내용을 알려주십시오. '이'가 해결할 대상은 무엇입니까? jQuery 객체를 다루고 있습니까? 더 많은 정보. –

3

는보십시오 이것이하는 일은 this에서 doTest라는 이름의 멤버를 잡아입니다

var funcObj = this["doTest"]; 
funcObj.apply(this); 

를 다음과 같습니다. 그런 다음 apply을 통해 함수를 실행하고 함수 내에서 thisthis으로 바인딩하도록 javascript에 지시합니다. 난 당신이 방법 doTest 당신이 경우 this

0

로 값 obj으로 실행됩니다이 경우이 아닌이 값

var obj = { 
    doTest: function() { 
    console.log("doTest called"); 
    } 
}; 

var doTestFunc = obj["doTest"]; 
doTestFunc.apply(obj); 

에 동일한 코드를 고려하는 경우의 예는 조금 덜 혼란 생각 jQuery를 사용하여 당신은 할 수 있습니다 :

$(this)[func]() 
6
this[func](); 

필요 없음을 .call 또는에 컨텍스트가 참조에 유지되므로

var obj = { 
    doTest: function(){ console.log(this); }, 
    fn: function(){ var name='doTest'; this[name](); } 
}; 
obj.fn(); // logs the object, proving this has the correct context. 
관련 문제