__proto__与prototype区别

145 阅读1分钟

1、其实说__proto__并不准确,确切的说是对象的[[prototype]]属性,只不过在主流的浏览器中,都用__proto__来代表[[prototype]]属性,因为[[prototype]]只是一个标准,而针对这个标准,不同的浏览器有不同的实现方式。在ES5中用Object.getPrototypeOf函数获得一个对象的[[prototype]]。ES6中,使用Object.setPrototypeOf可以直接修改一个对象的[[prototype]]。为了方便,我下面的文章用__proto__来代表对象的[[prototype]]。

而prototype属性是只有函数才特有的属性,当你创建一个函数时,js会自动为这个函数加上prototype属性,值是一个空对象。所以,函数在js中是非常特殊的,是所谓的一等公民。

【1】对象有属性__proto__,指向该对象的构造函数的原型对象。

【2】方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象。