如何推送到数组只引用变量?

时间:2014-02-10 19:16:35

标签: javascript

我的代码与此类似:

我创建变量:

var person1;

我将其添加到数组:

var people = [];
people.push(person1);

最后我定义了“person1”是什么:

person1 = new Person("Mike", 25, "London");

问题是,推送到数组后定义的人是未定义的。出于某些原因,在放入数组之前我无法定义所有人。我看,“people.push(person1);”实际上将此变量的副本放入数组。有可能这样做,我只将变量的引用放到数组中吗?

4 个答案:

答案 0 :(得分:1)

您必须创建对象的实例并将对象指针推送到数组上。现在问题是您正在推送undefined,因为您没有首先实例化Person对象。 显式你的代码当前是这样的:

var person1 = undefined;
var people = [];
people.push(person1);//pushing undefined unto the array
person1 = new Person();//now you have a pointer to an object

你必须首先实例化一个Person然后你的变量和数组条目都指向同一个东西

var person1 = new Person(); 
var people = [];
people.push(person1);//pushing a person reference onto the array
person1.someProperty = "lorem" 
people[0].someProperty = "ipsum"
//both person1.someProperty and people[0].someProperty are "ipsum"

类似地,您可以直接在数组中实例化person并创建引用数组中对象的变量。

var people = [new Person()]; //creates an array with a new person object.
people.push(new Person); //adds a new person to the array
var person1 = people[0];
var person2 = people[1];
person1.greet(person2);

答案 1 :(得分:1)

javascript中没有指针。 person1不会成为指针。

此变量将引用一个值。使用变量时,会引用当前值。所以,当使用它时:

var person1;
people = [];
people.push(person1);

undefined显示,因为这是person1的当前值。以后对person1的任何更改都会更改person1的值,但不会影响person数组中的任何值。

在这里采用更简单的方法并传递您创建的新值

更为合适
people = [];
people.push(new Person("Mike",25,"London"));

答案 2 :(得分:0)

首先,您需要将people定义为数组var people = []

然后推送到默认人new person()的数组,然后按索引people[1](例如)引用人,然后将其更改为您想要的

答案 3 :(得分:0)

你唯一能做的就是:

var person1 = new Person();
var people  = [];
people.push(person1);


people[0].name = "Mike";
people[0].age  = 25;
people[0].city = "London";