Riim / cellx

The ultra-fast implementation of reactivity for javascript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Как сделать ячейку 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 оставить на низком уровне.