【发布时间】:2012-12-13 11:59:46
【问题描述】:
我目前正在构建一个 Doubly linked list 实现。
我正在尝试(或希望)做的是使用 setter / getter 来设置列表中的元素,就像在数组中一样:
var index = 5;
list[index] = node_x;
但是,我不能只使用这种语法,因为从技术上讲,节点不是列表的属性。
将列表视为 2 个钩子。这 2 个钩子连接到链的 2 个末端,但您只能访问这 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.
现在,我试图用i getter/setter 来设置这样的元素:
var index = 5;
list.i(index) = node;
当然,这是行不通的,因为:
-
i不是函数; - 显然,我无法将变量分配给函数。
我当然可以只使用一个函数来设置元素:
list.setAtIndex(index, node);
但我更愿意以某种方式覆盖对象的数组表示法。
所以,我的问题是,这可能吗?如果是这样,我能得到一些提示吗? 我的搜索尝试只返回了资源 like this,我现在知道 getter / setter 是如何工作的。
【问题讨论】:
-
我认为这是不可能的,但是在数组无法完成的双向链表中,有什么更好的方法?
-
@Jack:与数组相比,元素的插入/删除相对较少(更不用说手动跟踪元素索引的对象了)。除此之外,这主要是我自己的一个小项目,学习一两件事。
-
(See the 3rd paragraph here 获取一些信息。)
-
@Bergi:真真假假。只是打错了... :)
标签: javascript object getter-setter