0

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 のコンテキスト オプションを使用して再定義できます)。

4

1 に答える 1

0

2 番目の質問では、定義される前にフィードバックを呼び出しています。my_obj.foo()を定義してから呼び出してみてくださいfeedback。さらに、これがすべてグローバルスコープで発生していることを確認してください(グローバルオブジェクトを参照しようとしているためfeedback

于 2012-10-14T20:05:24.327 に答える