#javascript
#javascript
Вопрос:
Например, рассмотрим класс Obj, который имеет переменные данных a и b и средства доступа к ним, A () и B():
class Obj
{
constructor ()
{
this.a = 5
this.b = 9
}
A () { return a }
SetA ( value ) { this.a = value }
B () { return b }
}
Идея состоит в том, чтобы отделить интерфейс от реализации, чтобы сделать код более гибким для будущих изменений. Итак, если вы измените что-то в переменных a и b, вам не нужно изменять весь код, который их использует.
Но я боюсь, что это может привести к большим накладным расходам, потому что это не было бы оптимизировано, как в других языках. Кроме того, функции являются гражданами первого класса в Javascript, поэтому вызывать их сложно.
Хорошая ли идея обращаться к данным подобным этому? Или этого следует избегать и как?
Комментарии:
1. Если вы когда-нибудь решите, что вам понадобятся установщики позже, вы можете прозрачно перейти к
set a(val) { ... }
…
Ответ №1:
Хорошая ли идея обращаться к данным подобным этому?
Я не вижу никакой пользы, это просто добавляет много шаблонов.
Если вам понадобится какой-то способ получения / установки позже, вы можете прозрачно добавить его, ничего не нарушая.
{ example: "test", }
// can be turned into
{
get example() { /*..*/ },
set example(v) { /*...*/ },
}
Насколько я вижу, то же самое относится и к C#:
string example
// can be turned to
string example {
get {
//...
}
}
поэтому я не уверен, о каких «лучших практиках» вы говорите.
… если вы измените что-то в переменных a и b, вам не нужно изменять весь код, который их использует.
Но … если эти свойства изменяются таким образом, что это влияет на их функциональность, код, использующий их, также должен быть изменен, использование геттеров / установщиков, чтобы «заставить это все еще как-то работать», не является долгосрочным решением.
Ответ №2:
Нет, вы не должны писать методы доступа в JavaScript. Они вам не нужны сейчас и не понадобятся в будущем. Сохраняйте свой код простым.
class Obj {
constructor() {
this.a = 5
this.b = 9
}
}
сделайте код более гибким для будущих изменений.
JavaScript поддерживает свойства getter и setter. Средство доступа не обязательно должно быть методом, оно работает с обычным синтаксисом свойств (как доступ, так и назначение). Если вы позже измените свои свойства данных на свойства accessor, код, использующий их, не нужно будет перенимать.
class Obj {
constructor() {
this.a = 5
}
get b() {
return this.a 4;
}
set b(val) {
this.a = val - 4;
}
}
const inst = new Obj;
console.log(inst.a, inst.b);
inst.b = 46;
console.log(inst.a, inst.b);