2017-08-16 75 views
2

我知道這個問題以前已經被問到過,但它們總是項目特定的,我找不到我要找的東西。我需要一個JavaScript對象數組。我已經聲明一個類爲:Javascript - 製作對象數組和理解構造函數

var svgData = {.....} 

(關鍵字類不在esversion可供選擇:5) 和我有一個數組變量:

var svgContent = []; 

我試圖做像你會在C#在這裏你可以這樣寫:

svgContent[0] = new svgData(); 

但是你通常會爲它創建一個構造函數,據我所知,不存在的JavaScript。我一直在使用這樣的函數:

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

但問題是,有這種和類之間沒有聯繫,因此我有,當我嘗試在數組中訪問變量使用問題一個循環是這樣的:

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

它多次返回相同的號碼(它只是壓倒一切的本身,因爲我已經做到了已連接的每個數組元素完全相同的變量svgData {}的方式 我如何創建類(對象)的實例?以及如何將構造函數鏈接到變量?

+0

_「這和班上沒有關係」_--你是什麼意思?你是用'svgContent [i] = new SvgData()'創建對象實例嗎? – evolutionxbox

+0

不,但如果我這樣做,什麼是說構造函數SvgData()甚至使用類?當然我可以創建一個名爲Create()的函數,它仍然可以工作?在C#中,您可以在類中編寫構造函數。 –

+1

我認爲你需要閱讀經典類和javascript OOP之間的差異。 javascript對事物做了很多不同的處理。一個很好的資源是Eric Elliot編寫的Javascript應用程序 – Cruiser

回答

1

你應該考慮的事實,JavaScript是一門獨立的語言和實現的事情了自己的方式。從你的問題中,我明白你需要一個數組(它仍然是JS中的一個對象,只是有一些特殊的屬性),並且你希望這些對象是由模板構成的(比如說一個「類」)。

你已經提到沒有構造函數,因爲沒有類。但是,您使用function SvgData的方式正是您設計「課程」的方式。這就是所謂的構造函數,它是特殊的,因爲它除了賦值給對象外並沒有其他語句,因此它隱含地返回對象(構造函數是返回對象this的任何函數)的this對象。

語法:new SvgData基本上是語法糖用於:創建一個新的空對象(來自「新」),併爲其分配從其接下來的任何函數返回的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

+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.