2015-09-05 2 views
13

Это может показаться смешным, но нестись со мной. Интересно, есть ли поддержка на уровне языка для разрушения объекта в свойства класса в конструкторе, например.ES6 Разрушение в классе конструктора

class Human { 
    // normally 
    constructor({ firstname, lastname }) { 
     this.firstname = firstname; 
     this.lastname = lastname; 
     this.fullname = `${this.firstname} ${this.lastname}`; 
    } 

    // is this possible? 
    // it doesn't have to be an assignment for `this`, just something 
    // to assign a lot of properties in one statement 
    constructor(human) { 
     this = { firstname, lastname }; 
     this.fullname = `${this.firstname} ${this.lastname}`; 
    } 
} 
+0

Если вы хотите 'fullname', чтобы сохранить изменения в' 'firstname' и lastname', используйте геттере https: //developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/Functions/get – Jan

+0

@Jan спасибо. Извините, это был плохой пример. Я просто хочу продемонстрировать, что после 'firstname' и' lastname' есть больше инициализации, если это имеет смысл. –

+0

'this' не может быть присвоено - в ES5 никогда, в ES6 единственное, что меняет свое значение, -' super() '. Но для назначения свойств на нем см. Дубликат. – Bergi

ответ

19

Вы не можете назначать this в любом месте на этом языке.

Один из вариантов заключается в объединении в this или другой объект:

constructor(human) { 
    Object.assign(this, human); 
} 
+1

Cheers. Я знаю, что мы не можем назначить это, но надеялись на что-то подобное. Я очень хотел использовать деструктуризацию, потому что он имеет четкую схему, то есть рассказываю мне, какие свойства назначаются. Но в любом случае, спасибо за ответ. –

+1

Или, может быть, вам это нужно? конструктор ({firstname, lastname}) { Object.assign (это, {firstname, lastename}); this.fullname = '$ {this.firstname} $ {this.lastname}'; } – r03

+0

@ r03 Есть ли у вас такое решение? –

Смежные вопросы