В настоящее время я создаю Doubly linked list.
То, что я пытаюсь (или надеюсь) сделать, - использовать setter/getter для установки элементов в списке, как и в массиве:
var index = 5;
list[index] = node_x;
Однако я не могу просто использовать этот синтаксис, потому что узлы не являются технически свойствами списка.
Подумайте о списке как 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);
Но я бы предпочел как-то переопределить нотацию массива для объекта.
Итак, мой вопрос, возможно ли это? И если да, могу ли я получить некоторые подсказки? Мои попытки поиска возвратили ресурсы как это, я знаю, как теперь работают геттеры/сеттеры.