是否可以重写Javascript数组或对象以进行调用?

tre*_*orm 8 javascript arrays monkeypatching

我想弄清楚Array []和Object []是否可以被Array()和Object()取代.函数原型可以插入到数组或对象原型链中以使它们可调用.基本上我正在寻找这样的事情:

// some magic with prototypes
????????????????

a = [1, 3, 4]
b = [1, 3, 4]

console.log(a[1]) // prints 3
console.log(b(1)) // prints 3

a[0] = -1
// same as
b(0, -1)

console.log(a[1], b(1)) // prints -1 -1
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Tam*_*ake 2

您可能不想这样做,尤其是在任何浏览器中。这没有 Array 的很多好的特性,包括效率。那是说:

function ArrayFunction (arr) {
  var f = function s (p, v) {
    if (v !== undefined) {
      s[p] = v
    }
    return s[p]
  }

  for (var i = 0; i < arr.length; i++) {
    f[i] = arr[i]
  }

  return f
}

var a = new ArrayFunction([1, 3, 4])
var b = new ArrayFunction([1, 3, 4])

b(1, 5)
a[1] //3
b[1] //5
Run Code Online (Sandbox Code Playgroud)

我最初想使用原型,但对象不会从原型继承可调用性。

编辑:修复上面不使用arguments. 此版本不允许您将值设置为undefined,但这通常不被认为是一个好的做法。