2010-12-17 9 views
0

私はインデックスに応じて呼び出すことができるように、関数の配列を作成しようとしています。 set関数が機能しません。 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'作成します。 '[]'は '配列'を作成します。両者には大きな違いがあります。 – zzzzBov

答えて

2

call:this.f1の文脈でthisが実際にwindowないthingを参照しているので、これが動作しない理由はあります。

this

のみthingのメンバ関数内から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.f1、this.f2]はこれが==ウィンドウのため動作しません。物はまだ定義されていないので、[thing.f1、thing.f2]は動作しません。 –

関連する問題