prototype是函数的属性,每个函数都拥有一个prototype属性;__proto__是一个对象拥有的内置属性,是new一个实例时动态添加的属性,也是js内部寻找原型链的属性。
prototype属性拥有一个constructor属性和一个__proto__属性,默认情况下constructor指向构造函数自身即fun.prototype.constructor == fun;对于普通对象,__proto__是该对象的原型链即fun.prototype,对于函数,__proto__是fun构造器即Function的prototype(Funtion.prototype)
对象在原型链查找属性时,是沿着__proto__查找的;函数的__proto__是Function.prototype即fun.prototype.constructor.__proto__,而普通对象的__proto__就是obj.__proto__即fun.prototype
function Animal () { } Function.prototype.say = function () { alert("function"); } Object.prototype.say = function () { alert("object") } Animal.say(); //function Animal.prototype.say();//object
转载于:https://my.oschina.net/u/1992917/blog/611723