7251
下記違いは何でしょうか？

```

    Object.create(Object.prototype);
    
    Object.create({});
    
```

・上 … null をプロトタイプとするオブジェクト  
・下 … 上 をプロトタイプとするオブジェクト？

・それぞれメリットデメリットがあれば知りたいです
CC BY-SA 3.0
2015-02-27T10:51:52.163
7224
2015-02-28T11:46:15.003
7886
question
javascript
Object.create(Object.prototype);とObject.create({});の違い
どちらも実質的には同じですので、メリットデメリットといったものはありません。

厳密には、下の`Object.create({});`は以下のコードと等価です。

```

    Object.create(Object.create(Object.prototype));
    
```

内部的にはプロトタイプチェーンの階層が異なります。

つまり、`Object.create(Object.prototype);`は直接の`prototype`が`Object.prototype`であるオブジェクトを生成しますが、`Object.create({});`の場合は直接の`prototype`は`{}`によって生成されたオブジェクトになります。その`{}`によって生成されたオブジェクトの`prototype`は`Object.prototype`です。

```

    a = {};
    
    b = Object.create(Object.prototype);
    a.isPrototypeOf(b);                  // false
    Object.prototype.isPrototypeOf(b);   // true
    
    b = Object.create(a);
    a.isPrototypeOf(b);                  // true
    Object.prototype.isPrototypeOf(b);   // true
    
```
CC BY-SA 3.0
2015-02-28T11:46:15.003
7251
2015-02-28T11:46:15.003
3639
7224
answer