严格来说,__proto__指向的不是prototype,而是指向prototype所指向的那个对象。
你创建了一个函数对象foo。所以,foo.prototype指向一个Object对象:
1: function foo(){}
然后,以foo对象为原型创建了一个bar对象。所以,bar.__proto__指向foo.prototype所指向的这个对象,也就是指向同一个Object对象:
2: bar = new foo();
最后,让foo.prototype指向一个新的Object对象。注意,此时,bar.__proto__并没有人去修改它,仍然指向原来的Object对象:
3: foo.prototype = new Object();
我是看图说话分割线 执行完bar = new foo();
后,是这样:
foo.prototype bar.__proto__
\ /
\ /
\ /
\ /
Object
而不是这样:
bar.___proto___
|
|
foo.prototype
|
|
Object