Можно ли сделать список присвоений свойств конструктора короче?

Можно ли избежать «этого» списка назначений и каким-то образом «разложить» все аргументы, указанные в конструкторе?

class MyClass {
    constructor(arg1, arg2, arg3, arg4, arg5) {
        this.arg1 = arg1;
        this.arg2 = arg2;
        this.arg3 = arg3;
        this.arg4 = arg4;
        this.arg5 = arg5;
    }

}

person Bambino Negro    schedule 21.02.2019    source источник
comment
Всегда ли имена свойств похожи на arg{N}?   -  person ibrahim mahrir    schedule 22.02.2019
comment
независимо от имен - просто чтобы как-то распространить аргументы на то же или подобное this.properties   -  person Bambino Negro    schedule 22.02.2019
comment
Как насчет передачи объекта в качестве параметра конструктора вместо отдельных аргументов?   -  person Barmar    schedule 22.02.2019
comment
Бармар - покажи мне, пожалуйста, что ты имел в виду   -  person Bambino Negro    schedule 22.02.2019
comment
new MyClass({ arg1: 1, arg2: "foo", ...})? Затем вы можете использовать Object.assign() в конструкторе.   -  person Barmar    schedule 22.02.2019
comment
Или используйте исходные аргументы и используйте Object.assign(this, {arg1, arg2, arg3, arg4, arg5});   -  person Barmar    schedule 22.02.2019
comment
Я не уверен, на какой комментарий вы ссылаетесь. Но он никогда не говорил, что она меняется динамически, просто она может меняться со временем. Когда вы меняете его, вы соответственно меняете строку Object.assign.   -  person Barmar    schedule 22.02.2019


Ответы (1)


Вы можете взять массив ключей и перебрать аргументы.

class MyClass {
    constructor(...args) {
        var keys = ['arg1', 'arg2', 'arg3', 'arg4', 'arg5']
        keys.forEach((k, i) => this[k] = args[i]);
    }
}

var instance = new MyClass('a', 'b');

console.log(instance);

person Nina Scholz    schedule 21.02.2019
comment
Вероятно, это то, о чем думал @NenadVracar. - person Barmar; 22.02.2019
comment
Может быть лучше перебрать keys, тогда вы просто проигнорируете любые лишние аргументы. - person Barmar; 22.02.2019
comment
Барнар - напишите как комментарий, чтобы я мог отметить его как правильный ответ - person Bambino Negro; 22.02.2019