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

覆盖对象';JavaScript中的s括号[index]getter/setter?,javascript,object,getter-setter,Javascript,Object,Getter Setter,我目前正在构建一个实现。 我尝试(或希望)做的是使用setter/getter在列表中设置元素,就像在数组中一样: var index = 5; list[index] = node_x; 但是,我不能只使用这种语法,因为节点在技术上不是列表的属性。 把这个列表想象成两个钩子。这两个挂钩连接到链条的两端,但您只能访问这两个连接链节(以及通过它们的兄弟链节)。 链链接的其余部分不是列表的属性。这就是为什么如果可能,我需要覆盖对象上括号[]的实现 我的(简化/缩短)代码是: 现在,我试图使用Ige

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

var index = 5;
list[index] = node_x;
但是,我不能只使用这种语法,因为节点在技术上不是列表的属性。
把这个列表想象成两个钩子。这两个挂钩连接到链条的两端,但您只能访问这两个连接链节(以及通过它们的兄弟链节)。
链链接的其余部分不是列表的属性。这就是为什么如果可能,我需要覆盖对象上括号
[]
的实现

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

现在,我试图使用
I
getter/setter来设置如下元素:

var index = 5;
list.i(index) = node;
但当然,这不起作用,因为:

  • i
    不是一个函数
  • 显然,我不能给函数赋值
  • 我当然可以使用一个函数来设置元素:

    list.setAtIndex(index, node);
    
    但我更愿意以某种方式覆盖对象的数组表示法

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

    我不知道您是否愿意,但请看一看


    我认为这还不完全令人满意,因为它默认地说,在提供参数时,您希望访问

    我认为这是一个非常糟糕的主意。对于链表,在索引i处获取项目的成本为O(n)。通过索引访问链表是Java犯的一个错误,其他人不应重复。这个错误不是针对C++和C语言的。< /P> 在大多数情况下,数组通常更适合于随机插入和删除,因为线性搜索的O(n)代价在性能上占主导地位,而数组更适合于预取。不,真的:


    我建议在完全没有索引访问的情况下使用链表实现,因为您可以证明使用链表(可能是实现队列)可以获得性能优势。我建议在所有其他情况下使用内置阵列。除了在一般情况下更好地用于大多数用途之外,您还可以从内置阵列中获得比任何第三方链表实现多得多的优化好处。

    除了这是个坏主意之外,这根本不可能。

    我认为这是不可能的,但是,在不能使用数组的双链接列表中,有什么比使用数组更好呢?@Jack:与数组相比,插入/删除元素所需的时间相对较少(更不用说手动跟踪元素索引的对象了)。除此之外,这主要是我自己的一个小项目,学习一件或两件事。(获取一些信息。)看看ES6代理。但这一功能并未得到广泛支持@伯吉:没错。只是打错了…:)我无意冒犯,但这不是我真正想要的。如果不重写函数,我无法设置长度(
    list.length=5
    ),也无法将
    list[index]
    设置为某个
    节点。你确实给了我一个想法,我可以怎么做。对,因为属性的东西已经不存在了,但它变成了一个get/set函数。很公平,没问题,我很高兴,我曾经想让它成为现实,但我想,为什么要付出额外的努力D
    
    list.setAtIndex(index, node);