Javascript Array.push()
Javascript Array.push()
我是Javascript新手,现在在Array上遇到了一个问题。Push和this在prototype.
下面是我的代码: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
。
this.array.length = 2;
,而继续得到array.length = 3
?注:您还可以查看JSFiddle中正在运行的代码。
this.array;
//在changeArray()
内部指向与传递给new Ball([123, 198])
的相同的数组;
var array = this.array;
//这使得数组指向同一个数组。所以对数组的改变也会改变你的数组
With
var array = this.array;
var allArray = this.allArray;
可以有效地设置指向this
对象属性的指针。所以,所有你用array
做的事情,其实都是用this.array
做的。
如果你想在this.array
的复制,你应该做
var array=this.array.slice(0);
。您应该知道,即使这种方法也只会在一个级别上生成新的数组元素。如果您使用的是数组的数组,那么数组(或任何其他对象)内部的将再次只是指向原始数组的指针。
相关文章:
- NodeJS API调用中Array中的Push和Pull元素
- Array.push导致程序出错
- 带array.push()的双方括号---JavaScript
- 检测未绑定的本机函数,如“Array.push”
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- 有时 array.length 只在 .push() 之后工作(为什么?)
- Array.push() 和唯一项
- 重复对象中的Array.push(),不正确或无法理解
- JavaScript array[“index”].push() 不起作用
- array.push.apply to implment 'concat' with explain
- Array.push受到Array.unshift后调用的影响
- JavaScript array.push (object) with Angular ng-repeat 无法按预期运
- 使用 array.push 正确编码
- Javascript Array.push 方法问题
- express.JS .push cousing array to be undefined
- 如果不在数组中 -> array.push
- 常规推送和 Array.prototype.push.apply 有什么区别?
- 仅使用 Array.push 时数组中的单位化变量
- javascript array.push(array.prush(x))奇怪的结果
- Push Array in Array