Javascript类澄清

时间:2014-01-30 07:00:47

标签: javascript class

请仔细阅读代码

function Item()
{
this.state = 0;
}

Item.prototype.SendRequest = function()
{
  //some request callback returns and calls GotResult
  var that = this;
  {
  that.GotResult();//used 'that' because its inside another block
  }
}

Item.prototype.GotResult = function()
{
  //add to local db with callback which calls AddedToLocalDb
  var that = this;
  // Here is where the problem is
  {
  that.AddedToLocalDb();//..... ERROR
  }
}

Item.prototype.AddedToLocalDb = function()
{
}

在“this.AddedToLocalDb()”上我得到了它的未定义。这是为什么?有任何想法吗? 在那个块'this'变量是未定义的。我犯了错误还是存在范围问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

当调用回调函数时,这可能是回调函数和this值丢失的问题。但要确定,您必须显示涉及回调的实际代码。我们不仅需要查看方法定义,还需要查看使用这些方法的实际代码,以解决问题。

我怀疑这是你打电话并将GotResult传递给的人。如果猜测正确,那么您可以通过this.GotResult.bind(this)而不是仅仅传递this.GotResult,这可能会解决您的问题。

这种类型的问题有时可以使用var that = this技术解决,但只有在同一范围内使用本地函数时才有效,而不是在兄弟范围内定义的方法定义。