写在前面
上篇文章详细解释了一下prototype与__proto__两个属性的差异与联系。这里涉及到原型链的概念,所以我就又生出了疑问,javascript中既然所有东西都是对象,而他们又是相互继承的关系,子又生孙,孙又生子,无穷匮也,那他们的源头又在哪里,换句话说,他们共同的祖先在哪里。所以,这回我通过对Function与Object两个对象的实验,试图弄清这个事儿。
两个老祖先:Function.prototype与Object.prototype
我把我通过实验得到的结论画成了类图,只想知道结论的朋友看这张图就可以了。这个图里有两个对象是所有对象的始祖,Object.prototype与Function.prototype,它俩是这篇文章的主角,如下:
原型链的尽头:大祖宗Object.prototype
请记住,Object.prototype是一切对象原型的尽头,在javascript中,如果你不故意把__proto__赋值成null,那只有Object.prototype这一个对象的__proto__天然就是null。
console.log(Object.prototype.__proto__ === null);//true
我想既然Object.prototype.__proto的值天然是null,那我人工给它赋值会怎么样,我就很邪恶的尝试了一下:
Object.prototype.__proto__ = {A:'a'};
console.log(Object.prototype.__proto__);
结果报了一大堆很恶心的错误:
Error: Cyclic __proto__ value
at Object.__proto__ (native)
at Object.<anonymous> (/Users/myc/Code/test/index.js:1:90)
at Module._compile (module.js: