Javascript 向数组中添加元素不会增加其长度
我编写了一个函数,将其Javascript 向数组中添加元素不会增加其长度,javascript,arrays,Javascript,Arrays,我编写了一个函数,将其arrvar变量设置为接收到的参数。 然后,我向该函数添加了一些方法: setArray:将参数添加到arrvar showArray:输出数组arrvar showArrayType:输出数组的类型arrvar(始终为对象) showLength:输出数组的长度arrvar 这里的问题是当我调用setArray()时,arrvar的长度没有增加,如下所示。为什么会这样 function ArrayClass() {
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**
函数ArrayClass()
{
if(arguments.length!=0){
this.arrvar=参数;
}
}
ArrayClass.prototype.setArray=函数(){
for(var i=this.arrvar.length,j=0;j ”);
}
ArrayClass.prototype.showArrayType=函数()
{
document.writeln(typeof this.arrvar+'
');
}
ArrayClass.prototype.showLength=函数()
{
if(this.arrvar){
document.writeln('Length:'+this.arrvar.Length+“
”);
}
}
var arrObj=新的ArrayClass(11,22,33,44);
arrObj.showArray()//11 22 33 44
arrObj.showArrayType()//对象
arrObj.showLength()//4.
arrObj.setArray(55,66,77);
arrObj.showArray()//11 22 33 44 55 66 77
arrObj.showArrayType()//对象
arrObj.showLength()//**4**
您的问题是参数
不是数组,而是某种类似数组的集合。您可以将其转换为一个数组,如sothis.arrvar=array.prototype.slice.call(参数,0)
我看不出这个ArrayClass
函数有任何用处。为什么不直接使用本机javascriptArray
对象呢?无论如何,您的代码可能要短得多,例如(替换文档。使用控制台写入。在此处记录):
函数ArrayClass(){
this.arrvar=[].slice.call(参数)| |[];
}
ArrayClass.prototype.setArray=函数(){
this.arrvar=this.arrvar.concat([].slice.call(参数));
}
ArrayClass.prototype.showArray=函数(){
对于(var i=0;iyeah)这不是最终的代码,我知道从上面的摘录中这个函数没有具体的意义,因为我已经将代码简化为需要的代码来解释问题:p
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);
}