Javascriptを学んでおります。

書き方がいくつかあるかと思うのですが、一般的な書き方は  
下記の2種類のうち、どちらが主流なのでしょうか？（これ以外の書き方もありますか？）  
またそれぞれの書き方のメリット・デメリットはありますでしょうか？

サイトによって書き方がバラバラで初心者にとって  
最初はどっちで書けばいいのかいまいちわかりません。

よろしくお願いいたします。

```

    function animal1(name, age, sex)  {
      this.name = name,
      this.age = age,
      this.sex = sex,
      this.getName = function() {
        console.log(name);
      },
      this.getAge = function() {
        console.log(age);
      }
      this.getSex = function() {
        console.log(sex);
      }
    };
    
    var animal2 = function(name, age, sex)  {
      this.name = name,
      this.age = age,
      this.sex = sex,
      this.getName = function() {
        console.log(name);
      },
      this.getAge = function() {
        console.log(age);
      }
      this.getSex = function() {
        console.log(sex);
      }
    };
    
    var tama = new animal1("tama" , 13, "female");
    tama.getName();
    
    var mike = new animal2("mike" , 11, "male");
    mike.getName();
```
CC BY-SA 4.0
2019-02-24T05:00:23.013
52989
2019-02-25T06:17:31.960
2019-02-24T05:08:08.563
26264
26264
question
javascript
Javascriptのオブジェクトの書き方はどちらが主流なのでしょうか？
前者 **関数宣言** のメリット

  * 関数式よりコードがシンプル
  * ソース上で、関数宣言より上に関数を呼ぶコードを書ける

```

    var tama = new animal1("tama", 13, "female");
    function animal1(name, age, sex) {
      ...
    }
    
```

後者 **関数式** のメリット

  * クラスのメソッドを書くには関数式にするしかなく、コンストラクタも関数式にしたほうが一貫性がある。
  * 関数を名前空間内に置くには、関数宣言だと二度手間になるので関数式のほうがシンプル。

```

    // 名前空間 com.example.zoo の定義
    const com = {};
    com.example = {};
    com.example.zoo = {};
    // animal2 を 名前空間 com.example.zoo 内で定義
    com.example.zoo.animal2 = function(name, age, sex) { ... };
    // インスタンス化
    let mike = new com.example.zoo.animal2(...);
    
```

以上を踏まえても、 **たいした違いではないのでどっちでも**
好きな方を選べばよいと思います。どちらかというと前者のほうがよく見るような気がしますが、個人的な印象でしかありません。

状況が許すなら、最近はclass構文が好まれるという印象です。

```

    class animal3 {
      constructor(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
      }
    
      getName() {
        console.log(this.name);
      }
    
      getAge() {
        console.log(this.age);
      }
    
      getSex() {
        console.log(this.sex);
      }
    }
    
```
CC BY-SA 4.0
2019-02-25T01:28:42.780
53005
2019-02-25T06:17:31.960
2019-02-25T06:17:31.960
3475
3475
52989
answer