用于填充对象的JavaScript类

时间:2013-11-26 22:55:23

标签: javascript

我正在尝试使用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

3 个答案:

答案 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 }) 
    }

}