我最近开始在Javascript中学习模式,并尝试通过模拟“类”来了解它是如何工作的。所以很可能这个错误是由于对如何执行的错误理解而出现的。访问回调中的类属性
我有以下的一般类:
var Collection = (function(){
function Collection(){
this.collection = {};
}
var p = Collection.prototype;
p.callback = function(data){collection = data;}
return Collection;
})();
API是一个单例类。 Get_Data方法将执行一些Ajax调用,但到目前为止它只是一个对象。 singleton类是如下:
var WebService = (function(){
var instance;
var init = function(){
return {
get_data: function(callback){
// Dump data without accessing the Server
callback({'id':1234, 'data':"hello world"})
}
}
}
return {
get_instance: function(){
if(!instance)
instance = init();
return instance;
}
}
})();
在某些时候,我创建了一个集合类和一些源获取一些数据(这将是从Web服务,但到目前为止,我只是用一个对象)。
var collection_objects = new Collection();
var api = WebService.get_instance();
api.get_data(collection_objects.callback);
我使用的应该更新模型数据的收集数据的回调方法(名称回调简单)。我的问题是,在回调中我没有访问收藏属性。实际上我创建了一个名为collection的新对象。在某些时候,我认为我应该使用“this”,但由于我将使用Ajax调用,因此我必须将“this”保存在另一个通常称为“self”的vble中。这是迄今为止我读过的理论,但我必须在哪里使用“自我”?这是方法吗?
添加“var self = this;”在某个地方一级。然后在你的回调函数中使用“self.collection”。 –
@MarvinSmit你是什么意思与一个级别?因为我尝试将它添加到构造函数中,但该对象有两个属性:collection和“self”(“self”将包含另一个集合和“self”等)。它创建递归对象包含另一个,另一个,等等......是吗? – kitimenpolku