Javascript - 创建对象数组并理解构造函数

时间:2017-08-16 12:41:24

标签: javascript class object constructor

我之前已经问过这个问题,但他们总是针对具体项目而我找不到我想要的东西。

我需要javascript中的对象数组。我已将类声明为:

var svgData = {.....} 

(关键字类在esversion中不可用:5) 我有一个数组变量:

var svgContent = [];

我尝试过就像你在C#中所做的那样:

svgContent[0] = new svgData(); 

但是你通常会为它创建一个构造函数,据我所知,它在javascript中不存在。我一直在使用这样的函数:

function SvgData (....) {
    this.var = ...; 
    etc.
}

但问题是这个和类之间没有链接,因此我有一个问题,当我尝试使用这样的for循环访问数组中的变量时:

for(var i = 0; i < length; i ++){
    console.log(svgContent[i].var);
}

它重复返回相同的数字(它只是覆盖它自己,因为我已经完成它的方式已经将每个数组元素链接到完全相同的变量svgData {}。 如何创建类(对象)的实例?那么如何将构造函数链接到变量?

2 个答案:

答案 0 :(得分:2)

您可以轻松更改代码以获得所需内容(据我所知):

function SvgData(value) {
    this.var = value;
    // ...
}

// use this instead of your svgData variable:
SvgData.prototype = {
    // ...
}

var svgContent = [];

svgContent.push(new SvgData("value")); 

Read more on JavaScript prototypes.

答案 1 :(得分:1)

您应该考虑JavaScript是一种独立的语言,并以自己的方式实现。根据你的问题,我理解你想要一个数组(它仍然是JS中的一个对象,只有一些特殊的属性),你希望这些对象是从模板制作的(比如说“类”)。

你提到没有构造函数,因为没有类。但是你使用function SvgData的方式正是你如何设计“类”。这被称为构造函数,它是特殊的,因为除了this对象的赋值之外没有其他语句,因此它隐式返回this对象(构造函数是返回this的任何函数宾语)。

语法:new SvgData基本上是语法糖:创建一个新的空对象(来自“new”)并为其分配从下一个函数返回的this对象。

function SvgData (val) {
    this.var = val;
}

var myLength = 10;
var myArr = [];

for (var i = 0; i < myLength; i ++) {
    myArr.push(new SvgData(i));
}

console.log(myArr);

这应该做你想做的事。您可以对其进行测试here