我正在努力更好地理解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中调用很好,但是除非我从中调用window.feedback(),否则超时调用将失败在setTimeout中。
关于这两个问题的任何想法?
由于
更新
这是我的代码(会产生错误):http://jsbin.com/ecotoj/12/edit
感谢Asad向我展示了在$ .ajax中更改'this'的上下文的问题(并且您可以在$ .ajax中使用jQuery的上下文选项来重新定义它)
答案 0 :(得分:0)
在第二个问题中,您在定义之前调用反馈。在定义my_obj.foo()
后尝试拨打feedback
。此外,请确保所有这些都发生在全局范围内(因为您尝试引用全局对象feedback
)