我有以下包含以下内容的MediaObject对象:
在我的getMedia函数中,我进行了ajax调用,并且在成功时我希望能够 创建一个Media对象并将该对象推送到我的数组中。但是,由于某些原因我无法引用我的数组,我应该如何引用它?
我试过了两个:MediaObject.arrayList.push(mediaItem)和this.arrayList.push(mediaItem); 都没有工作。
function MediaObject(){
function Media(){
this.id = "";
}
this.arrayList = [];
AmebaObject.prototype.getMedia = function(){
$.ajax({
url: this.rooturl+ this.loginurl,
type: 'GET',
headers: myheaders,
dataType: 'xml',
success: function (xml) {
this.xml = xml;
$(xml).find("media").each(function(){
var mediaItem = new Media();
mediaItem.id = $(this).find('id').text();
MediaObject.arrayList.push(mediaItem);
});
},
error: function (xhr, textStatus, errorThrown) {
console.log("Status code : " + xhr.status);
console.log("Error: " + errorThrown);
}
});
}
}
错误:未捕获的TypeError:无法调用未定义的方法'push'
答案 0 :(得分:1)
如果您希望arrayList成为MediaObject函数的一部分,请编写
MediaObject.arrayList = [];
如果要将arrayList作为MediaObject的成员引用,则需要更改在success函数中引用它的方式。
答案 1 :(得分:1)
我可能会弄错,但对我来说,MediaObject
是构造函数,而访问MediaObject.arrayList
的方式则表示静态属性。这有点令人困惑。
正如user1329482建议的那样,你可以静态地使用arrayList,但是你可能应该在构造函数之外定义它(否则每个新实例都会重置它)。
但是,如果要将其用作实例属性,则使用this
是唯一的选择。要在回调范围内使用this
,您必须定义一些局部变量(通常为var that = this
)并以此方式访问它,或bind()
您的回调。