2015-09-05 111 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',使用一個getter HTTPS://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Functions/get – Jan

+0

@Jan right thanks。對不起,這是一個不好的例子。我只是想證明'firstname'和'lastname'之後有更多的初始化,如果這是有道理的。 –

+0

'this'不能被分配給 - 在ES5中從不,在ES6中唯一改變它的「值」的是'super()'。但要分配屬性,請參閱重複項。 – Bergi

回答

19

您無法在語言的任何位置分配到this

一種選擇是合併到this或其他對象:

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

乾杯。我知道我們不能分配給這個,但希望有類似的東西。我非常熱衷於使用解構,因爲它有一個清晰的模式,即告訴我哪些屬性被分配。但無論如何,謝謝你的答案。 –

+1

或者你需要這個?構造函數({firstname,lastname}){ Object.assign(this,{firstname,lastename}); this.fullname ='$ {this.firstname} $ {this.lastname}'; } – r03

+0

@ r03你有沒有嘗試過這個解決方案?它實際上有效嗎? –