私はJavascriptで「this」のコンテキストを試していますが、理解できない状況があります。
ここから見つけたjavascriptの動作方法に基づいて、オブジェクトで関数が呼び出されると、オブジェクトが最も起動したパラメーターとして暗黙的に(またはcall
メソッドを使用するときに明示的に)渡されることを理解しています。
しかし、私がテストしようとしたが、期待したことをしなかった2つのケースがあります。//なぜ機能しないのですか?の後の2行を見てください。次の2つの値が定義されていないのはなぜですか?
これがjsFiddleのコードです(これも下に貼り付けられています)
function Beta(c, myValParam) {
var callback = c;
this.myVal = myValParam;
this.RunCallback = function () {
callback();
}
this.ShowVal = function () {
alert("FROM Beta: " + this.myVal);
}
}
function Alpha() {
this.myVal = "Alpha's Property";
this.ShowVal = function () {
alert("FROM Alpha: " + this.myVal);
}
}
a = new Alpha();
a.ShowVal();
b = new Beta(a.ShowVal, "Beta's property passed in");
b.ShowVal();
//Why doesn't ths work? Why are the follwoing 2 values undefined?
b.RunCallback.call(b); //Shouldn't this display the value in b?
b.RunCallback();
b2 = new Beta(function() { return a.ShowVal.call(a); }, "Z");
b2.RunCallback();
編集: Quentin、dystroy、doughからの回答のおかげで、コンテキストがウィンドウオブジェクトに戻ったときに生成される値を表示するようにjsFiddleを更新しました
そして、これが私が抱えていた問題を修正する呼び出しを含むコードです callback.call(this)