我的代码与此类似:
我创建变量:
var person1;
我将其添加到数组:
var people = [];
people.push(person1);
最后我定义了“person1”是什么:
person1 = new Person("Mike", 25, "London");
问题是,推送到数组后定义的人是未定义的。出于某些原因,在放入数组之前我无法定义所有人。我看,“people.push(person1);”实际上将此变量的副本放入数组。有可能这样做,我只将变量的引用放到数组中吗?
答案 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";