Я изучал некоторые основные принципы в javascript, но у меня есть некоторые проблемы, связанные с ограничением моего кода. В C # и Java мы можем легко сделать такого рода ограничения и увидеть результаты, но в javascript я не совсем понимаю, что происходит под капотом.
Во всяком случае, я пытаюсь создать код, чтобы люди не могли изменить его снаружи. Вот почему я узнал, что мы должны использовать локальные переменные вместо создания свойств объекта и использования getFunction в качестве метода, который мы можем просто читать извне.
Другой подход - использование "Object.defineProperty" (методы получения и установки)
Все это прекрасно работает для примитивных типов, но я думаю, у нас есть некоторые проблемы. Я не могу ограничить свой код только для чтения. Без написания каких-либо методов установки я могу изменить значения из-за функции ссылочного типа. Итак, как я могу подойти к этой проблеме?
// Abstraction
function Circle(radius) {
this.radius = radius;
let defaultLocation = { x: 0, y: 0 };
let color = 'red';
this.getDefaultLocation = function() {
return defaultLocation;
}
this.draw = function(){
for (let key in defaultLocation) {
console.log(key, defaultLocation[key]);
}
console.log('drawn');
};
// This can be changed from outside without set(){}
Object.defineProperty(this, 'defaultLocation', {
get(){
console.log('get function');
return defaultLocation;
}
});
// This needs set(){} to be changed
Object.defineProperty(this, 'color', {
get(){
console.log('get function');
return color;
},
set(value){
color = value;
}
});
}
const circle = new Circle(10);