我是JS的新手,甚至是indexedDB的新手。 我的问题是我需要从回调函数中引用一个对象。 因为“req.onsuccess”不称为“同步”,所以“this”不引用Groupobject。 这就是为什么“this.units”和其他变量未定义的原因。 一个非常肮脏的解决方案将是一个全局变量,但我只是不愿意这样做。 还有另外一种方法吗? 也许将一个参数传递给回调?
function Group(owner, pos)
{
this.name = "";
this.units = [];
//...
}
Group.prototype.addUnit = function(unit)
{
let req = db.transaction(["units"]).objectStore("units").get(unit);
req.onsuccess = function(event)
{
let dbUnit = event.target.result;
if (dbUnit)
{
this.units.push(dbUnit);//TypeError: this.units is undefined
if (this.name == "")
{
this.name = dbUnit.name;
}
}
};
};
myGroup = new Group(new User(), [0,0]);
myGroup.addUnit("unitname");
感谢您的帮助!
修改
使用“bind(this)”解决了这个问题。
Group.prototype.addUnit = function(unit)
{
let req = db.transaction(["units"]).objectStore("units").get(unit);
req.onsuccess = function(event)
{
let dbUnit = event.target.result;
if (dbUnit)
{
this.units.push(dbUnit);//TypeError: this.units is undefined
if (this.name == "")
{
this.name = dbUnit.name;
}
}
};
}.bind(this);
答案 0 :(得分:1)
那么你的onSucess在哪里?让我们尝试在JS中绑定,调用,应用。 http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals/