我们知道原型总结起来就一句话:实例对象的__proto__指向构造函数的prototype,prorotype属性中的constructor指向其构造函数。
而我们还知道__proto__是隐式原型,那么这个隐式原型又是什么呢?
上代码:
var obj = {names: "running_yong", age: 25};
打开控制台
我们可以看到,除了我添加的两个属性外,还有第三个属性:[[Prototype]]。这是什么呢?继续打开
原来这是一个继承属性,它包含了从Object中继承的属性,但若你试着去直接访问[[Prototype]],可能不行,因为这是内部属性,不能被直接访问,那既然不能被直接访问,要这个属性干嘛呢,不就没用了吗?这个问题,请看图中最后两行:`get __proto__`和`set __proto__`。这两个是访问器属性,访问它时触发get,设置它时触发set,那访问触发谁呢?从这两个方法的写法来看,它的名字就是`__proto__`。
这说明隐式原型(__proto__)其实就是一个访问器属性,它操作的是内部隐藏属性[[Prototype]],__proto__可以访问(触发get)[[Prototype]]中继承的属性,也可以通过设置__proto__(触发set)操作[[Prototype]]。