Как сделать ячейку read-only?
arvitaly opened this issue · comments
Не самое важное, но сейчас ячейка из любого места доступна для изменения. Или предполагается, что нужно прописывать функцию с throw в свойство put
второго параметра при создании?
Если нужно как-то ограничивать место из которого можно изменять ячейку, то тут вряд ли что-то можно сделать, в js-е нет модификаторов типа readonly/protected и решается это обычно на уровне соглашений, например, есть всеобщее соглашение, что подчёркивание перед именем делает свойство protected. Можно с arguments.caller поэкспериментировать, но его вроде хотят совсем выпилить из языка.
В остальном можно попробовать что-то с validate придумать:
let readonlyCell = new Cell(5, {
validate(value, oldValue) {
if (oldValue !== void 0 && value !== oldValue) {
throw new TypeError(`Property "${ name }" is readonly`);
}
}
});
здесь ячейка создастся без ошибки, но потом не даст записать в себя какое-то другое значение.
Есть ещё опция get
, для некоторых ситуаций тоже может пригодиться.
Понятно, видимо та же ситуация, что и с добавлением методов в прототип, лучше делать обертки, а cellx оставить на низком уровне.