Показать сообщение отдельно
  #4 (permalink)  
Старый 29.09.2021, 20:20
Аватар для drwhite
Интересующийся
Отправить личное сообщение для drwhite Посмотреть профиль Найти все сообщения от drwhite
 
Регистрация: 16.11.2015
Сообщений: 14

Сообщение от voraa Посмотреть сообщение
К свойству класса или к свойству объекта, который внутри класса?

А что вы имеете в виду под "динамическим" - непонятно.
К свойству объекта, который является экземпляром соответствующего класса.

Под динамическим имеется ввиду перехват обращения к любому свойству, в том числе и несуществующему.

Сообщение от Aetae Посмотреть сообщение
Также можно что угодно перехватывать через Proxy. Но, обычно, не нужно.
Не совсем понятно как реализовать перехват через прокси внутри класса. И если не нужно, то как обычно реализуется доступ к свойствам объекта, которых может быть довольно много, неужто на каждое создавать свой геттер/сеттер?

В общем, задача в том, чтобы не создавать геттер/сеттер на каждое свойство, которых может быть немало, а поместить их в объект-обертку _params, и при обращении Instance1.param перехватывать и проверять наличие запрашиваемого свойства внутри переменной _params.
Как-то так
class TProc {
  _params = {param1: 1, param2: 2, param3: 3};
  constructor() {
  }
  get param1(){return this._params.param1}
  get param2(){return this._params.param2}
  get param3(){return this._params.param3}
}

const T1 = new TProc();
let a = T1.param2; //вернет this._params.param2
let b = T1.param0; //вернет undefined, потому что в _params такого не значится.

Просто сейчас это реализовано через обычный метод getParam(param_name), но запись Instance1.param2 короче, чем Instance1.getParam('param2').


PS
И еще, может подскажете, как лучше инициализировать свойства класса/объекта с помощью передаваемых параметров?

Сейчас класс имеет переменную объект-обертку _params с параметрами по умолчанию. При создании экземпляра в конструктор передается объект, содержащий рабочие параметры work_params.

Нужно обновить _params в соответствии с переданными рабочими параметрами work_params.
Object.assign не работает с вложенными объектами. Сейчас пришлось сделать рекурсивный обход по _params и обновлять значения в соответствии с work_params.
class TProc
  _params = {id: '', min_value: 0, max_value: 100, value: 50, label: {text: '', visible: false, width: 50, height: 20}}
  constructor(input_params)
  {
      commonLib.initParams(input_params, this._params);
  }
}//class

const work_params = {id: 't1', value: 0, label: {text: 'Action', visible:true, width: 100}};
const T = new TProc(work_params);
T.dump();//id: 't1', min_value: 0, max_value: 100, value: 0, label: {text: 'Action', visible: true, width: 100, height: 20}}


Видимо, есть способы получше, кто знает поделитесь =)

Последний раз редактировалось drwhite, 29.09.2021 в 20:24.
Ответить с цитированием