![](/img/trans.png)
[英]Javascript: finding all objects in an array which have certain properties and values
[英]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.