2016-10-25 9 views
0

今日はES6構文をいじり、この基本的なテストクラスを作った。コンストラクタの割り当てをより簡潔に(そしてシンプルに)する方法はありますか?

class Animal { 
    constructor(type, age, name = "Unnamed Animal") { 
    this.type = type; 
    this.age = age; 
    this.name = name; 
    } 
    talkToMe() { 
    console.log(`Hi, my name is ${this.name}, and I am a ${this.type}!`); 
    } 
} 

は、新しいES6の構文を使用してコンストラクタをより簡潔にする方法はありますか?あなたがObject.assignで一度に3つのすべての割り当てを行うことができ

constructor(type, age, name = "Unnamed Animal") { 
    this = {type, name, age}; 
} 

答えて

3

私はあなたがのような単純なコードを持っていることをかなり確信したので、私は「ノー」と言うつもりでしたそれが必要ですが、私はObject.assignobject constructor shorthand syntaxを使用する能力を思い出しました。

あなたは、このようにそれらのすべてを割り当てることができ、設定するプロパティのたくさんを持っていれば:

constructor(type, age, name = "Unnamed Animal") { 
    Object.assign(this, { 
    type, 
    age, 
    name 
    }); 
} 

このパフォーマンスヒットに来る、と私はそれが約同じだと思います読みやすさに関する限り、this.prop = propと入力すると迷惑ですが、です。

個人的に

、私はに固執したい:はい、あなたはObject.assignを使用することができます

this.name = name; 
this.age = age; 
this.type = type; 
+1

私、私は私の答えを落としました。しかし、 'Object.assign'は構文的な砂糖ではなく、関数を呼び出しています。私は 'x = y'の代わりに' x = y'の構文の代わりにこれを使っています... –

+0

@MatíasFidemraizer、 'Object.assign'呼び出しが新しく、' {type、age、name} 'を使ってオブジェクトを構築することができます新しいES2015構文でもあるため、質問の要件をほとんど満たしていません。それは、私はあなたに同意しないと言った。私は私の答えがはっきりしていることを望む。 – zzzzBov

+0

ええ、それは正しい答えだったのですが、私はもっとダウンボートを得るので私の答えを落とさなければなりませんでした:**いいえ、何も割り当てよりも簡潔です**。プログラミング言語が非常に簡潔な方法で何かをシミュレートするために関数を使うことができる他の多くの状況があります。しかし、OPと他の訪問者の両方が関数呼び出しで割り当てを置き換えるのがうまくいけば、ハッピー! :D –

2

のようなおそらく何か、、:

constructor(type, age, name = "Unnamed Animal") { 
    Object.assign(this, { type, name, age }); 
} 
+0

'Object.assign'に関する良い文書は、niceを含む[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)で入手できます。 ES6を使用できない場合のポリフィル。 –

1

class Animal { 
 
    constructor(type, age, name = "Unnamed Animal") { 
 
    Object.assign(this, {type, name, age}); 
 
    } 
 
    talkToMe() { 
 
    console.log(`Hi, my name is ${this.name}, and I am a ${this.type}!`); 
 
    } 
 
} 
 
new Animal('elephant', '5', 'Dumbo').talkToMe();

ような何かをできるようにする proposalがあります
this .= {type, name, age}; 
関連する問題