JS 构造函数原型对象设为 null，为什么其实例依旧存在原型链？
```
    function Dog(){}
    Dog.prototype = null;
    var dog = new Dog();
    console.log(dog.__proto__==Object.prototype)//为什么这里dog.__proto_不是null，不是dog.__proto应该指向 Dog.prototype的么
```
可以查看es5的说明：
> If Type(proto) is not Object, set the [[Prototype]] internal property of obj to the standard built-in Object prototype object as described in 15.2.4.
就是说，在通过 new 关键字来创建一个对象的时候，会查看 Dog.prototype 是不是一个对象，如果不是的话，就设置为 `Object.prototype`
如果你想让 dog 没有原型链，可以 `var dog = Object.create(null)`
`Object.create`的执行步骤可以看这里：
> Set the [[Prototype]] internal property of obj to O.
`Object.create(null)`
等价于：
```
var obj = new Object();
obj.__proto__ = null;
```