JavaScript のスコープをよりよく理解しようとしていますが、何かが機能しない理由がわかりません。
次のようなオブジェクトを定義しました。
var my_obj =
{
foo:function()
{
this.bar()
},
bar:function()
{
console.log('hello world!');
}
}
my_obj.foo();
しかし、「TypeError: this.bar は関数ではありません」というエラーが表示され、その理由がわかりません。
また、この新しいブロック内から以前に書いた別のコードを使用しようとしていますが、それも適切に機能していません。ここで、次のことが起こります。
var my_obj =
{
foo:function()
{
feedback('hello world!');
}
}
my_obj.foo();
feedback = function(msg,y)
{
if( !y )
{
setTimeout(function()
{
feedback(msg,1);
} , 1000 );
return;
}
else
{
console.log(msg);
}
}
これは以前は正常に機能していました (グローバル スコープ内から feedback() を呼び出した場合) が、現在、フィードバックは foo から正常に呼び出されますが、setTimeout 内から window.feedback() を呼び出さない限り、フィードバックのタイムアウト呼び出しは失敗します。
これらの問題のいずれかに関するアイデアはありますか?
ありがとう
アップデート
これが私のコードです(両方のエラーが発生します):http://jsbin.com/ecotoj/12/edit
「this」のコンテキストが $.ajax 内で変更されたという問題を示してくれた Asad に感謝します (また、$.ajax 内で jQuery のコンテキスト オプションを使用して再定義できます)。