Javascript:数组中的所有对象都具有相同的属性

Javascript:数组中的所有对象都具有相同的属性,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试创建数组中列出的对象列表。newConstant是一个创建对象并将其推送到数组的函数。但是,当while循环在数组中运行并抛出包含每个数组的一个属性的警报时,它会为数组中的每个对象吐出最后一个对象的值。在这种情况下,它每次都会警告“3”,但它应该先警告“1”,然后警告“3”,因为这些是数组“a”中两个对象的属性x的值。代码如下。我怎样才能解决这个问题 var i = 0; var a = []; var newConstant = function (x, y) { this.

我正在尝试创建数组中列出的对象列表。newConstant是一个创建对象并将其推送到数组的函数。但是,当while循环在数组中运行并抛出包含每个数组的一个属性的警报时,它会为数组中的每个对象吐出最后一个对象的值。在这种情况下,它每次都会警告“3”,但它应该先警告“1”,然后警告“3”,因为这些是数组“a”中两个对象的属性x的值。代码如下。我怎样才能解决这个问题

var i = 0;
var a = [];
var newConstant = function (x, y) {
    this.x = x;
    this.y = y;
    a.push(this);
};
var one = newConstant(1, 2);
var two = newConstant(3, 4);

while (i < a.length) {
    alert(a[i].x);
    i++;
}
var i=0;
var a=[];
var newConstant=函数(x,y){
这个.x=x;
这个。y=y;
a、 推(这个);
};
VarOne=新常数(1,2);
var 2=新常数(3,4);
while(i
您是作为构造函数编写的
newConstructor
,但您将其用作普通函数,请尝试添加
new
关键字

var i = 0;
var a = [];
var newConstant = function (x, y) {
    this.x = x;
    this.y = y;
    a.push(this);
};
var one = new newConstant(1, 2); //notice the new keyword indicating a constructor
var two = new newConstant(3, 4);

while (i < a.length) {
    alert(a[i].x);
    i++;
}
var i=0;
var a=[];
var newConstant=函数(x,y){
这个.x=x;
这个。y=y;
a、 推(这个);
};
var one=新的新常数(1,2)//请注意,new关键字指示构造函数
var 2=新的新常数(3,4);
while(i
这就是它的作用:

这里有一篇关于。这是另一个


之前发生的事情是,您的第二个调用将
this.x
设置为3,但是
this
引用了
窗口
,这是因为javascript中的函数将其分配给调用方,除非它们是构造函数。在您的情况下,您两次提醒
window.x
(设置为3),导致
3
您忘记了关键字“new”,请参见下面的示例:

var one = new newConstant(1, 2);
var two = new newConstant(3, 4);

数组中的每个对象都是
窗口
@zzzzBov我在回答中提到:)