2010-12-17 4 views
0

인덱스에 따라 함수를 호출 할 수 있도록 함수 배열을 만들려고합니다. 설정 기능이 작동하지 않습니다. setF1 및 setF2 함수가 수행합니다. 이런 식으로 작업하게 한 디자인 결정은 무엇입니까?배열에서 javascript 함수를 사용하면 왜 작동하지 않습니까?

당신은 jrootham.tjddev.net/test/test.html

내가 여기 테스트 코드를 붙여 넣을 수없는 것

에서 테스트 페이지를 찾을 수 있습니다.

<!DOCTYPE HTML> 
<html>  
    <head>  
    <script type="text/javascript"> 
    var thing = 
    { 
    f1 : function() {alert(1);}, 
    f2 : function() {alert(2);}, 
    setF1 : function() {this.call = this.f1;}, 
    setF2 : function() {this.call = this.f2;}, 
    list : [this.f1, this.f2], 
    set: function(index){this.call=this.list[index];}, 
    call : this.f1 
    } 
    </script>  
    </head>  
    <body> 
    <button type="button" onClick="thing.set(0)">Set 0</button>  
    <button type="button" onClick="thing.set(1)">Set 1</button>  
    <button type="button" onClick="thing.setF1()">Set F1</button>  
    <button type="button" onClick="thing.setF2()">Set F2</button>  
    <button type="button" onClick="thing.call()">Call</button>  
    </body> 
</html> 
+0

'{}''object' 생성; '[]'는'array'를 만듭니다. 이 둘 사이에는 상당한 차이가 있습니다. – zzzzBov

답변

2

call:this.f1의 맥락에서 this 실제로하지thingwindow를 참조하기 때문에 이것이 작동하지 않는 이유.

thisthing의 멤버 함수 내에서 thing을 참조한다.

다음 것 그러나 일 :

var thing = { //watch out for semicolon insertion... 
    f1 : function() {alert(1);}, 
    f2 : function() {alert(2);}, 
    setF1 : function() {this.call = this.f1;}, 
    setF2 : function() {this.call = this.f2;}, 
    set: function(index){ this.call=this.list[index]; }, 
    call : function() { 
    this.f1(); 
    } 
}; 
thing.list = [thing.f1, thing.f2]; 
+0

대단히 감사합니다. –

+0

당신이 말한 것에 대한 제 이해를 확인합니다. –

+0

내부 내용 : this == window이기 때문에 [this.f1, this.f2]가 작동하지 않습니다. 물건이 아직 정의되어 있지 않기 때문에 [thing.f1, thing.f2]가 작동하지 않습니다. –

관련 문제