在java中,您可以通过声明其名称后跟此引用外部类。
class A {
void A() {
}
class B {
void B() {
A.this.A();
}
}
}
现在我试图在javascript中做类似的事情。 Bellow我有一个构建一个ajax调用的构造函数。如果成功设置get方法和AssetManager的资产,则调用此ajax。
function AssetManager(path) {
this.assets = {};
this.get = function(tag,name) {
return 0;
};
$.ajax({
url: path,
dataType: 'json',
success: function(o) {
if (o.sprite) {
var keys = Object.keys(o.sprite);
for (var i = 0; i < keys.length; i++) {
var obj1 = keys[i];
AssetManager.this.assets.sprite[obj1] = new Image();
AssetManager.this.assets.sprite[obj1].src = o.sprite[obj1];
}
}
AssetManager.this.get = function (tag, name) {
return assets[tag][name];
}
}
});
}
答案 0 :(得分:0)
您必须在执行ajax之前创建变量并将其指向此并在成功处理程序中访问它:
function AssetManager(path) {
// ......
// Set this object to me variable
var me = this;
$.ajax({
url: path,
dataType: 'json',
success: function(o) {
if (o.sprite) {
var keys = Object.keys(o.sprite);
for (var i = 0; i < keys.length; i++) {
var obj1 = keys[i];
me.assets.sprite[obj1] = new Image();
me.assets.sprite[obj1].src = o.sprite[obj1];
}
}
me.get = function (tag, name) {
return assets[tag][name];
}
}
});
答案 1 :(得分:0)
假设你的ajax调用假设是懒惰地初始化你的AssetManager的其他属性,你需要保存this
的引用,以便它可以在ajax方法中使用(其中this
的含义会改变)
function AssetManager(path) {
this.assets = {};
this.get = function(tag,name) {
return 0;
};
var self = this;
$.ajax({
url: path,
dataType: 'json',
success: function(o) {
if (o.sprite) {
var keys = Object.keys(o.sprite);
for (var i = 0; i < keys.length; i++) {
var obj1 = keys[i];
self.assets.sprite[obj1] = new Image();
self.assets.sprite[obj1].src = o.sprite[obj1];
}
}
self.get = function (tag, name) {
return assets[tag][name];
}
}
});
}