0
var Test = (function() {
return {
someValue: 69,
staticMethod: function(){
return this.someValue;
}
}
}());
console.log(Test.staticMethod());
var doIt = Test.staticMethod
console.log(doIt())
出力:期待静的メソッドに変数セットを呼び出すときに、これは未定義である
69
undefined
:
69
69
がなぜ2回目の呼び出しのコンテキストでthis
存在しません。 ?
デモ:
function(){
return this.someValue;
}
this
.
前のオブジェクトである:同じ機能
staticMethod
から
http://jsbin.com/kidefoniko/edit?js,console
オブジェクトがコンテキストなしで呼び出されるためです。この関数の値は、実行コンテキストに依存します。 – adeneo
正しい方法は 'doIt.call(Test)'ですか?それがテストであることを知らないとどうなりますか?とにかくそのコンテキストを見つけるためにはありますか? – LearningJrDev
実際には、コンテキストはあなたが設定したものであり、あらかじめ定義されていません。 'Test.staticMethod()'を実行すると、コンテキストを 'Test'に設定します.2番目の例では、関数への参照を作成し、コンテキストなしで呼び出すので、' call'、 'apply'代わりにコンテキストを設定するために 'bind'を使います。 – adeneo