在JavaScript中覆盖对象的括号[index] getter/setter?

Cer*_*rus 15 javascript object getter-setter

我目前正在构建一个双向链表实现.
我正在尝试(或希望)做的是使用setter/getter来设置列表中的元素,就像在数组中一样:

var index = 5;
list[index] = node_x;
Run Code Online (Sandbox Code Playgroud)

但是,我不能只使用这种语法,因为节点在技术上不是列表的属性.
将列表视为2个钩子.这两个挂钩连接到一个链的两端,但你只能访问那两个连接的链节(和他们的兄弟姐妹通过它们).
其余链链接不是列表的属性.这就是为什么我需要覆盖[]我的对象上的括号的实现,如果可能的话.

我的(简化/缩短)代码是:

(function () {
    "use strict"
    window.List = function () {
        var Length //Etc
        return {
            //Getter / Setter example.
            get length() {return this.Length;},
            set length(n) {this.Length = n;},
            //Function example.
            insertBeginning: function (newNode) {/*  */},
            insertEnd: function (newNode) {/*  */},

            //Index getter / setter attempt.
            get i(index){ console.log(index); },
            set i(index, node){ console.log(index); }
        };
    };

}());

var list = new List();
list.length = 10 //This works just fine
console.log(list.length) // Returns 10, like expected.
Run Code Online (Sandbox Code Playgroud)

现在,我试图用igetter/setter 做的是设置这样的元素:

var index = 5;
list.i(index) = node;
Run Code Online (Sandbox Code Playgroud)

但是,当然,这不起作用,因为:

  1. i 不是一个功能;
  2. 显然,我无法将变量赋值给函数.

我当然可以使用一个函数来设置元素:

list.setAtIndex(index, node);
Run Code Online (Sandbox Code Playgroud)

但我更喜欢以某种方式覆盖对象的数组表示法.

所以,我的问题是,这可能吗?如果是这样,我能得到一些提示吗?我的搜索尝试只返回了资源,这样,我知道getter/setter方法现在是如何工作的.

Cer*_*rus 3

这不仅是一个坏主意,而且根本不可能。