(※修正ばかりでごめんなさい、なんか考えの沼にはまってしまって)
初期化が目的なのであればdoSomething2です。
ちゃんと書くなら次のような感じ。
javascript
1class foo {
2 // 割愛
3 Initialize() {
4 this.bar.aaa = 10;
5 this.bar.bbb = 0;
6 }
7}
違いについては、例えば乳牛を例にして考えてみては?
doSomething1ですがこれは、自分が持つ情報を他に与えるような作りになっています。コンストラクタでは、たまたま自分に情報を与えているだけです。
doSomething2ですがこれは、ただの初期化です。
javascript
1class 乳牛 {
2 constructor () {
3 this.初期水分 = 10
4 this.初期脂肪分 = 0
5 this.乳房 = { 水分: 123, 脂肪分: 456 }
6 this.doSomething1(this.乳房)
7 this.doSomething2()
8 }
9
10 doSomething1(乳牛Xの乳房) { 乳牛Xの乳房.水分 = this.初期水分 },
11 doSomething2() {
12 this.乳房.脂肪分 = this.初期脂肪分
13 }
14}
不変性を絡めた質問をしたかったと考えると、
次に示すdoSomething3, 4みたいなことを例にしたかったとか?この場合、引数をクローンしておかないと、乳房を共有することになっておかしくなっちゃいます。
javascript
1class 乳牛 {
2 constructor () {
3 // 割愛
4 }
5
6 doSomething3(乳牛Xの乳房) { this.乳房 = 乳牛Xの乳房 },
7 doSomething4(乳牛Xの乳房) { this.乳房 = 乳牛Xの乳房.クローン() }
8}
#####不変性
渡した引数を変えてはいけないうんぬんかんぬんは、不変性のことかな~と思います。
不変性については、例えば Immutableの利便性、大きなメリットについて。 こういった記事が見つかります。Immutable.jsのページを見ると、調査のとっかかりになるかもしれませんね。