Использование Object.freeze
В случае, если вы пытались реализовать что-то, как описано здесь . Разница между этим подходом и тем, что вы здесь делаете, заключается в том, что вы должны обновлять массив данных, а не переназначать его полностью. Так как Object.freeze
мы, по сути, выполняем мелкое замораживание, вам разрешается делать pu sh и вставлять массив data
, но не переназначать его (то, чем вы являетесь делаю в вашем примере). Таким образом, будет работать следующее:
class Test {
constructor(){
this.data = [];
}
setData(data) {
this.data.push(...data);
}
}
const test = new Test();
Object.freeze(test);
export default test;
И тогда вы можете добавить свои данные следующим образом:
import Test from './test'
Test.setData(1,2,3);
Личные свойства
Так как я понимаю, что ваш Цель состоит в том, чтобы создать частные свойства, которые невозможно обновить за пределами вашего синглтона. Вы также можете следовать подходу, описанному в этом ответе SO Ответ . В вашем случае это будет выглядеть следующим образом:
class Test {
constructor(){
let data = [];
this.setData = (newData) => data = newData;
this.getData = () => data;
}
}
const test = new Test();
test.setData([1,2,3]);
console.log(test.getData());
Поскольку поле данных отображается не напрямую, а только в области видимости вашего конструктора, единственный способ обновить или извлечь его - использовать
setData
и
getData
, к чему вы стремились делаем.