2014-01-13 30 views
0
function test() { 
    var test_array = []; 
} 

var arrayList = new Array(); 
arrayList[0] = new test(); 
arrayList[0].test_array[0] = "test"; 

try it out實例化對象中的數組如何返回undefined?

我試圖創建一個數組,初始化一個對象作爲該陣列的一個成員,然後文本值分配給該對象內的陣列。然而,對象內的數組給出了

TypeError: arrayList[0].test_array is undefined 

當我嘗試將一個字符串分配給內部數組。我仍然很新的JavaScript,所以任何提示最好的做法,在這種情況下,將不勝感激。

+0

test_array變量只能在test()中訪問。你必須公開它與「這」 – Silkster

+0

看到可能重複[Javascript:我需要將this.var爲每個變量在對象?](http://stackoverflow.com/questions/13418669/javascript-do-i對於變量和屬性之間的區別,需要將此變量放入此對象中) – Bergi

回答

4

聲明var test_array = [];創建一個局部變量,該變量在其定義的範圍之外是不可見的。你需要的是被定義爲對象實例屬性的變量。使用this參考您的test函數中:

function test() { 
    this.test_array = []; 
} 

用於JavaScript範圍的詳細信息,請閱讀the documentation

+0

當我進行此更改時,得到SyntaxError:缺少變量名稱 http:// jsfiddle.net/5t62z/4/ –

+0

@WilliamMartin:這個答案中沒有語法錯誤。仔細閱讀並打字,並仔細檢查你的工作。你正在做'var this.test_array = [];',這是無效的。 –

+0

@WilliamMartin奇怪,我修改了你的小提琴,因爲我已經通過'console.log(arrayList [0] .test_array [0])描述並打印了'arrayList [0] .test_array [0]'的值 - 它按預期工作。 – aga

2

var構造函數中的聲明實際上並不修改實例。它們只是在構造函數本身範圍內的本地範圍內。

要定義實例的屬性,你必須修改this

function test() { 
    this.test_array = []; 
} 
1

更新小提琴:http://jsfiddle.net/5t62z/3/

你的函數不返回任何東西。如果您注意到我的更新,我現在將返回一個帶有test_array屬性的對象。

function test() { 
    return { 
     test_array: [] 
    }; 
} 
+0

*「你的函數沒有返回任何東西......」*是的。它返回一個新的對象,因爲它是使用'new'調用的。 http://jsfiddle.net/5t62z/5/ –

+1

啊謝謝,一定是錯過了。 –