Javascript-自定义数组不起作用

Javascript - Custom arrays not working

本文关键字:不起作用 数组 自定义 Javascript-      更新时间:2024-02-26

请检查下面的代码-

custom_array.push(...) is working
but
custom_array[i] = "n"

不起作用。

还有一些事情我不确定为什么它不起作用。请注意带有"?"的注释,该注释无效。请参考小提琴-http://jsfiddle.net/vc0bbm3d/

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

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

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

为了使括号语法以这种方式工作,对象必须是一个实际的数组。

尝试

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

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

以下是我所说的在默认数组对象周围创建一层以扩展功能的意思的示例:

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

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