2012-02-19 9 views
0
var a = function(){ 

    this.x = function(){alert('apple');} 
    this.y = function(callback){ 
     if(typeof callback == 'undefined' || callback == null) 
      alert('argh') 
     else 
      callback(); 
    } 
} 
var foo = function(){alert('blah')}; 
var x = new a(); 
x.y(this.x); // why is this one undefined 
x.y(foo); // works as expected 

ここではjsfiddleリンクされています。私は、オブジェクトのメンバ関数に渡すとき、なぜそれがhttp://jsfiddle.net/W7FyZ/2/オブジェクトメンバー関数のコールバック? (Javascriptを)

定義されていませんか?オブジェクトメンバー関数をコールバックとして渡す方法はありますか?

答えて

0

私は混乱を解消するために変数の名前を変更しました。

var a = function(){ 
    this.x = function(){alert('apple');} 
    this.y = function(callback){ 
     if(typeof callback == 'undefined' || callback == null) 
      alert('argh') 
     else 
      callback(); 
    } 
} 
var foo = function(){alert('blah')}; 

次に、実行部で:ライン上

var myA = new a(); 

を割り当てる機能()変数 'MYA' です。関数x()y()a()の場合、myA.x()myA.y()と呼びます。

x.y(myA.x); // it works 
x.y(this.myA.x) // This also works as this is a current window 
x.y(foo); // works as expected 
4

x.y(this.x)を実行すると、thisはウィンドウへの参照であり、aのインスタンスではありません。私はあなたが意図している可能性が何だったのだと思う:

x.y(x.x); 

xaのインスタンスであるので、これはaのこのインスタンスのy方法にaのこのインスタンスのxメソッドへの参照を渡します。

あなたがx.y(foo)を行うと、fooはこのスコープで宣言された関数であるので、あなたはxy方法にfoo関数への参照を渡します。

+0

うーん、興味深いのが、私は内部でこれをしようとすると、xは道場モジュール、クロムの目的である道場が必要ですUncaught TypeError:未定義のメソッド 'func'を呼び出すことができません – Derek

+0

@Derek - おそらくもう少し詳しく、質問を明確にする必要があります。私はあなたが何を意味しているか完全にはわかりません。 –

関連する問題