具有设置自身的方法的数组

时间:2018-04-11 14:06:50

标签: javascript arrays

我正在尝试创建一个可以自行设置的数组对象。 像这样......

array = new Array(10)
array.someMethod = function () {
    this = new Array(20)
}

之外,不起作用,因为this无法像这样设置。

或多或少我想要一个我使用array[index]的对象。

2 个答案:

答案 0 :(得分:0)

在我看来,这可以通过使用一个对象并将数组存储在一个对象的属性中来实现。我正在学习class语法,所以我这样做了,但我认为相同的方法适用于常规对象。



class MyArray {
  constructor(num) {
    console.log(`building MyArray with ${num} objects`);
    this.innerArray = new Array(num);
  }
  
  update(num) {
    console.log(`updating MyArray to have ${num} objects`);
    this.innerArray = new Array(num);
  }

  get() { return this.innerArray }
}

let foo = new MyArray(10);
foo.get()[0] = "bar";
console.log(foo.get());
foo.update(20);
foo.get()[0] = "baz";
console.log(foo.get());




答案 1 :(得分:0)

你提出问题的方式不太对,你应该更好地解释。 不确定这是你想要的。

您无法更改javascript中的this。 但是prototype中的函数将以对象作为其上下文来调用。所以Array.prototype.length通过让arr作为它的上下文给出arr.length中的长度。 Array.prototype.splice

所以



Array.prototype.testA = function() {
  // this.splice(0,this.length);
  var a = [3,5,7];
  // new Array(23).fill().map( (a,_)=>_)
  this.splice(0,this.length,...a);
}

Array.prototype.testAA = function() {
  var a = [3,5,7];
  this.splice(this.length,0,...a);
}

var a = [1];
a.testAA();
console.log(a);
a.testA();
console.log(a);