Сообщение от 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}}
Видимо, есть способы получше, кто знает поделитесь =)