Если вы хотите, чтобы конструктор принимал дискретные аргументы, нет ничего лучше, чем отдельное присваивание, которое вы уже делаете, по крайней мере, на данный момент.
Вместо этого вы могли бы иметь конструктор, принимающий объект, что позвольте вам сделать это:
constructor(args) {
Object.assign(this, args);
}
, который вы называете так:
new Component({param1: "arg1", param2: "arg2", param3: "arg3"});
, но если это всего один-три параметра, это создает дополнительную работу на каждом сайте вызова, а не один раз в код конструктора и код конструктора менее понятны.
Третий вариант - принять параметр rest:
constructor(...args) {
["param1", "param2", "param3"].forEach((name, index) => {
this[name] = args[index];
});
}
, который вы вызываете обычным способом, но опять же, пока он субъективен. , для меня читаемость ухудшается.
Как примечание, как я думаю, вы, вероятно, знаете, TypeScript имеет эту функцию. Сейчас все чаще используется TypeScript (который компилируется в JavaScript для использования в браузерах). TypeScript не привязан к Angular, его можно использовать практически с любым каркасом (или без него).
Например, в TypeScript:
// TypeScript
class Component {
constructor(
public param1: string,
public param2: string,
public param3: string
) {
}
}
В коде нет необходимости вообще, конструктор TypeScript автоматически присваивает эти значения параметров этим свойствам publi c. (Вы также можете использовать private
или protected
.)