0

我正在尝试更好地理解 JavaScript 范围,但不确定为什么某些东西不起作用。

我已经定义了一个这样的对象:

var my_obj =
{
    foo:function()
    {
        this.bar()
    },
    bar:function()
    {
        console.log('hello world!');
    }
}
my_obj.foo();

但我收到错误“TypeError:this.bar is not a function”,我不明白为什么。

我也在尝试使用我之前在这个新块中编写的另一段代码,但这也不能正常工作。这里会发生以下情况:

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

感谢 Asad 向我展示了在 $.ajax 中更改了“this”的上下文的问题(并且您可以在 $.ajax 中使用 jQuery 的上下文选项重新定义它)

4

1 回答 1

0

在第二个问题中,您在定义之前调用反馈。my_obj.foo()定义后尝试调用feedback。此外,确保所有这些都发生在全局范围内(因为您试图引用全局对象feedback

于 2012-10-14T20:05:24.327 回答