prototype与proto
原型是js面向对象编程中非常重要的概念
prototype
每个函数都会有一个prototype属性,这个属性是一个指针,指向一个对象.(注意:bind方法返回的函数没有prototype属性)。
__proto__
每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。
prototype与__proto__之间的联系
平时我们在创建函数的时候其实默认是创建了Function的构造函数。在声明其他数据类型时,其实也是隐式的实例化其对应的构造函数,从而可以调用各种基础方法。
var funciotn Person(){} 《》 var Person = new Function();
通过实列对象的 __proto__属性,可以找到其构造函数的原型对象(prototype)
function Person(){} Person.__proto__===Function.prototype //true
在笔者认为 __proto__其实就是拷贝于其构造函数的prototype,为了区分实例与其构造函数而存在的。
因为函数的特殊性,可以给函数添加新的prototype,再通过new创建实例。
附上原型图


浙公网安备 33010602011771号