//this is a class
function SpriteSheetClass()
{
this.sprite="local";
$.getJSON(url, this.onLoaded);
}
SpriteSheetClass.prototype.onLoaded= function(json)
{
console.log(this.sprite); //returns undefined!
//I am out of SpriteSheetClass scope! how do I store the json???
}
var a=new SpriteSheetClass()
执行getJSON回调时,范围不在类中。 无法将返回的json与我的类实例(a)绑定
请记住,我希望保持调用异步,我需要创建许多SpriteSheetClass实例 这不是时间问题,而是一个范围问题。
感谢
答案 0 :(得分:1)
调用回调函数时,this
将不是对象,而是$.getJSON
函数。
您可以将this
的值绑定到回调,因此它将成为对象
$.getJSON(url, this.onLoaded.bind(this));
答案 1 :(得分:1)
使用现代浏览器,您可以使用function.bind(thisArg)来保持适当的范围。
function SpriteSheetClass() {
this.sprite="local";
$.getJSON(url, this.onLoaded.bind(this));
}
答案 2 :(得分:0)
本地包装函数可以完成这项工作:
function SpriteSheetClass()
{
this.sprite="local";
var that = this;
var callback = function(data) {
that.onLoaded(data);
};
$.getJSON(url, callback);
}