JavaScript原形链继承、__proto__、prototype的理解

原型链示意图


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.prototypeFoo.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是最顶级的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容