Разрушение объекта внутри конструктора в nodejs для присвоения значений переменной-члену не работает

Я пытаюсь уничтожить объект ES6 внутри конструктора, надеясь присвоить значение переменной-члену. Это не работает. Когда я печатаю значение внутри функции-члена, показывается неопределенным. Его печать правильно, если я печатаю внутри конструктора. Это верно?

    class Environment {
        constructor(env) {
            const { name, version } = env
            console.log(name)
        }

        printName() {
            console.log(this.name)
        }
    }
    var obj = { "name": "inst1", "version": "12.2.7" };
    var envObj = new Environment(obj);
    envObj.printName();

1 ответ

Решение

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

class Environment {
    constructor(env) {
        ({ name: this.name, version: this.version } = env);
    }

    printName() {
        console.log(this.name)
    }
}
var obj = { "name": "inst1", "version": "12.2.7" };
var envObj = new Environment(obj);
envObj.printName();

Если env содержит только те свойства, которые вы хотите (имя, версия), вы можете назначить объект № непосредственно this:

class Environment {
    constructor(env) {
        Object.assign(this, env);
    }

    printName() {
        console.log(this.name)
    }
}
var obj = { "name": "inst1", "version": "12.2.7" };
var envObj = new Environment(obj);
envObj.printName();

Другие вопросы по тегам