ptototype和__proto__区别
//a作为构造函数时的prototype属性与a作为普通函数时的__proto__属性并不相等 console.log(a.prototype == a.__proto__);//false console.log(a.__proto__); //function (){} console.log(a.__proto__ == Function.prototype);//true //a作为一个普通函数调用时,它的构造函数是内置对象Function,所以它指向的原型对象,就是Function.prototype. //其实这个和console.log(b.__proto__ == a.prototype)是一样的道理 //a作为构造函数时,它的原型,和它的原型的原型 console.log(a.prototype); //a{} console.log(a.prototype.__proto__); //Object{} //a作为普通函数时,它原型的原型 console.log(a.__proto__.__proto__); //Object{} console.log(a.__proto__.__proto__ == a.prototype.__proto__); //true
所有对象都有__proto__属性,函数这个特殊对象除了具有__proto__属性,还有特有的原型属性prototype。prototype对象默认有两个属性,constructor属性和__proto__属性。prototype属性可以给函数和对象添加可共享(继承)的方法、属性,而__proto__是查找某函数或对象的原型链方式。constructor,这个属性包含了一个指针,指回原构造函数。