将元素添加到数组中不会增加其长度
问题描述:
我已写入函数,它将其变量arrvar
设置为接收的参数。 然后我增加了一些方法,以该函数:将元素添加到数组中不会增加其长度
-
setArray
:增加的参数的arrvar
-
showArray
结束:数组arrvar
-
showArrayType
输出:输出阵列arrvar
的类型(这总是对象) -
showLength
:输出阵列的长度arrvar
这里的问题是,当我拨打setArray()
时,arrvar
的长度不会增加,如下所示。这是为什么?
function ArrayClass()
{
if (arguments.length != 0) {
this.arrvar = arguments;
}
}
ArrayClass.prototype.setArray = function() {
for (var i = this.arrvar.length, j = 0; j < arguments.length; i++, j++)
{
this.arrvar[i] = arguments[j];
}
}
ArrayClass.prototype.showArray = function()
{
for (var i in this.arrvar) {
document.writeln(this.arrvar[i]+' ');
}
document.writeln("<br />");
}
ArrayClass.prototype.showArrayType = function()
{
document.writeln(typeof this.arrvar + '<br />');
}
ArrayClass.prototype.showLength = function()
{
if (this.arrvar) {
document.writeln('Length: ' + this.arrvar.length + "<br />");
}
}
var arrObj = new ArrayClass(11, 22, 33, 44);
arrObj.showArray(); //11 22 33 44
arrObj.showArrayType(); //object
arrObj.showLength(); //4
arrObj.setArray(55, 66, 77);
arrObj.showArray(); //11 22 33 44 55 66 77
arrObj.showArrayType(); //object
arrObj.showLength(); //**4**
答
你的问题是arguments
不是一个数组,它的某种数组就像集合。您可以将它转换为像这样的数组this.arrvar = Array.prototype.slice.call(arguments, 0);
。
答
我不会看到这个ArrayClass
函数的任何使用。你为什么不使用原生javascript Array
对象?无论如何,你的代码可以缩短很多,例如(取代document.write
与console.log
这里):
function ArrayClass(){
this.arrvar = [].slice.call(arguments) || [];
}
ArrayClass.prototype.setArray = function() {
this.arrvar = this.arrvar.concat([].slice.call(arguments));
}
ArrayClass.prototype.showArray = function() {
for (var i=0;i<this.arrvar.length;i+=1) {
console.log(this.arrvar[i]);
}
}
ArrayClass.prototype.showArrayType = function() {
console.log(typeof this.arrvar + '<br />');
}
ArrayClass.prototype.showLength = function() {
console.log('Length: ' + this.arrvar.length);
}
JsFiddle这表明,和展示了相同的使用本地Array
。
是啊,这不是最终的代码,我知道这个函数没有特定的含义,从上面的摘录那是因为我已经剥离了代码来需要一个来解释问题:p – Mahesha999 2013-03-24 08:56:12