2014-01-13 53 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

啊谢谢,一定是错过了。 –