原型链示意图
objectA.__proto__ 代表objectA对象通过原型链得到的属性和方法,想让objectA继承对象objectB中的属性和方法,只要让 objectA.__proto__ = objectB 就好,一般推荐使用 objectA = Object.create(ObjectB) 。
对于对象字面量(用{}创建的对象)或通过new Object()创建的对象如图中的o1, o2,o1.__proto__ === Object.prototype,可以理解为自动继承了Object.prototype(Object的原型)的属性和方法;
对于函数(即function对象)(如 function Foo() 或 Foo = new Fuction() ),其Foo.__proto__ === Function.prototype,可以理解为所有的函数自动继承了Function.prototype(Function的原型)的属性和方法;
对于构造函数创建的对象(例如 f1 = new Foo() 或 new function(){} 后者相当于new匿名构造函数),f1.__proto__ === Foo.prototype,可以理解为所有的构造函数Foo创建的对象自动继承了Foo.prototype(Foo的原型)的属性和方法;
而对于 Function.prototype 与 Foo.prototype 来说,Function.prototype.__proto__ === Object.prototype,Foo.prototype.__proto__ === Object.prototype ,说明 Function.prototype 与 Foo.prototype 继承于 Object.prototype ;
对于 Object.prototype 来说,Object.prototype.__proto__ === null,说明Object.prototype是最顶级的。