在类中使用getJSON(范围问题)

时间:2014-08-03 17:29:20

标签: javascript jquery getjson

//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实例 这不是时间问题,而是一个范围问题。

感谢

3 个答案:

答案 0 :(得分:1)

调用回调函数时,this将不是对象,而是$.getJSON函数。

您可以将this的值绑定到回调,因此它将成为对象

$.getJSON(url, this.onLoaded.bind(this));

FIDDLE

答案 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);
}   
相关问题