Javascript-自定义数组不工作

Javascript-自定义数组不工作,javascript,jquery,arrays,prototype,Javascript,Jquery,Arrays,Prototype,请检查下面的代码- custom_array.push(...) is working but custom_array[i] = "n" 它不起作用 还有几件事我不知道为什么它不起作用。请注意带“?”的注释,该注释无效。请参阅小提琴-试试 ar[3] = 2; ar.length =4 这样它就知道你添加了一些东西 使用括号语法设置项对继承数组的对象不起作用的原因是它实际上不是数组 当属性名为整数时,数组具有处理属性赋值的特殊代码(这是使用括号语法所做的)。如果索引超出当前长度,则调整le

请检查下面的代码-

custom_array.push(...) is working
but
custom_array[i] = "n"
它不起作用

还有几件事我不知道为什么它不起作用。请注意带“?”的注释,该注释无效。请参阅小提琴-

试试

ar[3] = 2;
ar.length =4

这样它就知道你添加了一些东西

使用括号语法设置项对继承数组的对象不起作用的原因是它实际上不是数组

当属性名为整数时,数组具有处理属性赋值的特殊代码(这是使用括号语法所做的)。如果索引超出当前长度,则调整
length
属性

将值指定给对象中的属性时,没有处理长度的特殊代码。属性只是像往常一样被指定,而长度永远不会被调整。由于对象已经有了处理使用括号语法时发生的事情的代码,因此它所包含的数组永远不会起作用


要使括号语法以这种方式工作,对象必须是实际数组。

下面是一个示例,说明了我所说的围绕默认数组对象创建一个层以扩展功能的意思:

var SuperArray = function(){
  this.arr = Array.prototype.slice.call(arguments);
};
//abstraction of default array functionality
SuperArray.prototype.set = function(index, value){
  this.arr[index] = value;

  return this;
};

SuperArray.prototype.unset = function(index){
  this.arr.splice(index, 1);

  return this;
};
//extension of default array functionality
SuperArray.prototype.consoleList = function(){
  var arr = this.arr;
  for(var i = 0, l = arr.length; i < l; i++){
    console.log(arr[i]);
  };

  return this;
};

var extArr = new SuperArray(1,2,3);

extArr.set(2, 25); //does array[2] = 25;
extArr.unset(1);   //removes array[1]
extArr.consoleList();//console.logs all items in array

extArr.set(2, 25).unset(1).consoleList();//same thing
var SuperArray=function(){
this.arr=Array.prototype.slice.call(参数);
};
//默认数组功能的抽象
SuperArray.prototype.set=函数(索引、值){
此.arr[索引]=值;
归还这个;
};
SuperArray.prototype.unset=函数(索引){
该阵列拼接(索引1);
归还这个;
};
//默认阵列功能的扩展
SuperArray.prototype.consoleList=函数(){
var arr=this.arr;
对于(变量i=0,l=arr.length;i

这个简单的对象接受参数并将它们直接设置到一个数组中,然后我们按照自己的意愿对数组进行操作。然后,您可以添加所需的任何实用程序函数,检查现有的数组功能等。

您不能继承JavaScription中的
array
。假设我想要一个与数组完全相同的自定义数组,其中包含一些额外的函数。那么?@Teemu-请查看评论,这就是我不工作的意思。嗯,我没有看小提琴。无论如何,.看在上帝的份上,不要把人送到JSFIDLE,让他们坐五分钟。
alert()
s。为什么我要显式地设置长度?它不应该像数组一样自动设置长度吗?因为“数组”是建立在关联数组上的。意思是你可以做废话[1]=oor废话['bsf']]=并关联任何事情。但是普通的ol数组使用length来知道关联0->length-1是一个“数组”。。。或者一个宿主对象。@guffa-如果我想让括号语法像普通数组一样工作,那么怎么做呢it@nikhilrao:Teemu链接到的文章有一个适用于对象的解决方案,但并非所有浏览器都支持它,例如IE8和更早版本。要获得完全支持,您必须使用实际阵列。