一、2个参考网址:
http://icekiller110.iteye.com/blog/1566768
http://www.cnblogs.com/snandy/archive/2012/09/01/2664134.html
我是看第一个明白的最多的,因为归纳的比较到位,第二个网址写的内容比较详实
二、概念
__proto__是JS内部使用寻找原型链的属性。
prototype是显示修改对象的原型的属性。
三、一个例子
<script> var Person = function () { }; var p = new Person(); console.log(p.__proto__ === Person.prototype);//true console.log(Person.prototype.isPrototypeOf(p));//true </script>
上边这个例子很简单诠释了__proto__是寻找原型链的,而prototype仅仅是修改person的原型的
当然也可以直接定义原型链,比如p.__proto__ == person ,而不是person的原型,仍然有效,当然代码person就不能是空的函数了
并不是所有地方__proto__都是适用的,isPrototypeOf是可以都适用的
四、博客园一个叫snandy的大牛的一些更深入的东西
所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function)
Number.__proto__ === Function.prototype // true Boolean.__proto__ === Function.prototype // true String.__proto__ === Function.prototype // true Object.__proto__ === Function.prototype // true Function.__proto__ === Function.prototype // true Array.__proto__ === Function.prototype // true RegExp.__proto__ === Function.prototype // true Error.__proto__ === Function.prototype // true Date.__proto__ === Function.prototype // true
所有的构造器都来自于Function.prototype,甚至包括根构造器Object及Function自身。所有构造器都继承了Function.prototype的属性及方法。如length、call、apply、bind(ES5)。
Function.prototype也是唯一一个typeof XXX.prototype为 “function”的prototype。其它的构造器的prototype都是一个对象。
console.log(Function.prototype.__proto__ === Object.prototype) // true
Object.prototype.__proto__ === null // true
已经到顶了,为null。