我正在尝试使用JavaScript类填充对象。我甚至不确定我是否正确使用它,我是JavaScript OOP的新手。
var ImagesViewModel = {}; // Global object
function ImagesClass() {
this.addImage = function (iUrl) {
ImagesViewModel.push({ "ImageUrl": iUrl }) //< Error is here
}
}
var k = new ImagesClass()
k.addImage("http://www.yahoo.com")
k.addImage("http://www.xbox.com")
基本上我需要一种简单的方法来填充ImagesViewModel
多个属性。我是否需要在ImagesViewModel
中指定属性?也许我可以在不必指定全局变量的情况下完成所有这些工作?
我收到错误
对象没有方法PUSH
答案 0 :(得分:4)
你想要的是一个数组而不是一个对象,push是一个Array原型的方法,你试图在对象上使用它。
变化:
var ImagesViewModel = {};
要:
var ImagesViewModel = [];
您也可以这样做,以便ImagesClass
的每个实例都有自己的图像集。
function ImagesClass() {
var _images = [];
this.addImage = function (iUrl) {
_images.push({ "ImageUrl": iUrl }) //< Error is here
}
this.getImages = function(){
return _images;
}
}
并将其用作:
var k = new ImagesClass();
k.addImage("http://www.yahoo.com");
k.addImage("http://www.xbox.com");
var ImagesViewModel = k.getImages(); //You can either set it directly or as a property of object
console.log(ImagesViewModel);
<强> Demo 强>
答案 1 :(得分:1)
push方法仅适用于Arrays,这里你试图将push()推送到一个对象,这就是它无法工作的原因。
您需要将var ImagesViewModel = {};
更改为var ImagesViewModel = [];
答案 2 :(得分:1)
从设计的角度来看,你可能不希望你的viewmodel只是一个扁平数组(即使你把它声明为一个对象,就像其他海报指出的那样)。
我建议声明一个数组声明来保存ImagesViewModel对象中的图像。
var ImagesViewModel = { // ViewModel generic OBJECT
this.Images = new Array(); // prototype ARRAY object
};
function ImagesClass() {
this.addImage = function (iUrl) {
ImagesViewModel.Images.push({ "ImageUrl": iUrl })
}
}