繁体   English   中英

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

[英]Javascript: All Objects in Array Have Same Properties

我正在尝试创建数组中列出的对象列表。 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++;
}

您将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++;
}

它在起作用: http : //jsfiddle.net/V3zwW/

这是有关javascript中this关键字的文章。 这是有关如何正确使用构造器模式的另一参考

之前发生的是您的第二次调用将this.x设置为3。 this引用到window ,这是因为javascript中的函数将其分配给调用方,除非它们是构造函数。 在您的情况下,您window.x警告window.x (您将其设置为3)导致3 3

您忘记了关键字“ new”,请参见以下示例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM