Javascript Array.push()
Javascript Array.push()
我是 Javascript 的新手,现在在 Array.push 和原型中遇到一个问题。
这是我的代码:
function Ball(array) {
this.array = array;
}
Ball.prototype.allArray = []; // this is a property shared among ALL Ball object, though here I just create one object...
Ball.prototype.addArray = function() {
this.allArray.push(12);
}
Ball.prototype.changeArray = function() {
var array = this.array;
var allArray = this.allArray;
for (var i = 0; i < allArray.length; i++) {
array.push(allArray[i]);
}
// Array.prototype.push.apply(array, allArray); // same result as above
alert(array.length); // 3 Expected
/* PROBLEM */
alert(this.array.length); // 3, expected 2 Why 3? We just change array NOT this.array...
}
var ball = new Ball([123, 198]);
ball.addArray();
ball.changeArray();
如上面代码所述,我有一个问题为什么 this.array.length = 3
,而不是 2
。
在 changeArray
方法中,我一直只更改数组值,而不是 array.length
。这意味着 this.array
的值应该保持不变。因此,this.array.length
应该是 2
.
是不是我的思路有问题?另外,如何在继续得到array.length = 3
的同时得到this.array.length = 2;
?
P.S。您也可以查看 JSFiddle 中的 运行 代码。
this.array;
//在 changeArray()
中指向您传递给 new Ball([123, 198])
的同一个数组;
var array = this.array;
// 这使得数组指向同一个数组。因此对数组的更改也会更改您的数组。
与
var array = this.array;
var allArray = this.allArray;
您有效地设置了指向 this
对象的属性的指针。所以,你表面上用array
做的所有事情你实际上用this.array
做的。
如果您想对 this.array
进行 复制,您应该
var array=this.array.slice(0);
相反。您应该知道,即使这种方法也只会在 one 级别上生成 new 数组元素。如果您使用的是数组数组,那么 inside 数组(或任何其他对象)将再次只 pointers 指向原始数组。
我是 Javascript 的新手,现在在 Array.push 和原型中遇到一个问题。
这是我的代码:
function Ball(array) {
this.array = array;
}
Ball.prototype.allArray = []; // this is a property shared among ALL Ball object, though here I just create one object...
Ball.prototype.addArray = function() {
this.allArray.push(12);
}
Ball.prototype.changeArray = function() {
var array = this.array;
var allArray = this.allArray;
for (var i = 0; i < allArray.length; i++) {
array.push(allArray[i]);
}
// Array.prototype.push.apply(array, allArray); // same result as above
alert(array.length); // 3 Expected
/* PROBLEM */
alert(this.array.length); // 3, expected 2 Why 3? We just change array NOT this.array...
}
var ball = new Ball([123, 198]);
ball.addArray();
ball.changeArray();
如上面代码所述,我有一个问题为什么 this.array.length = 3
,而不是 2
。
在 changeArray
方法中,我一直只更改数组值,而不是 array.length
。这意味着 this.array
的值应该保持不变。因此,this.array.length
应该是 2
.
是不是我的思路有问题?另外,如何在继续得到array.length = 3
的同时得到this.array.length = 2;
?
P.S。您也可以查看 JSFiddle 中的 运行 代码。
this.array;
//在 changeArray()
中指向您传递给 new Ball([123, 198])
的同一个数组;
var array = this.array;
// 这使得数组指向同一个数组。因此对数组的更改也会更改您的数组。
与
var array = this.array;
var allArray = this.allArray;
您有效地设置了指向 this
对象的属性的指针。所以,你表面上用array
做的所有事情你实际上用this.array
做的。
如果您想对 this.array
进行 复制,您应该
var array=this.array.slice(0);
相反。您应该知道,即使这种方法也只会在 one 级别上生成 new 数组元素。如果您使用的是数组数组,那么 inside 数组(或任何其他对象)将再次只 pointers 指向原始数组。