JavaScript原型链

js中的继承是基于原型链来实现的,被实例化对象的__proto__属性指向了继承的对象

function Fn(){
    this.name = "许吉中"
}

Fn.prototype.birthday = "1993"

var foo_a = new Fn()

console.log(foo_a.birthday)   //1993

这段代码中,foo_a.__proto__就指向了Fn的prototype属性,在Fn的prototype属性添加属性,foo_a可以直接继承过来

foo_a.__proto__ === Fn.prototype
//true

而所有的Fn.prototype的__proto__都会指向Object.prototype,这里所说的Fn为function对象,而非function new出来的实例化对象,这也是为什么说Object是每一个对象的父类,每一个对象都可以使用Object中的方法

Fn.prototype.__proto__ === Object.prototype
//true

Object.prototype的__proto__指向null

Object.prototype.__proto__ === null
//true

要特殊注意的是Function对象,注意F是大写的,所有的function对象都是Function创造出来的

var fn1 = new Function("a","b","return a + b")
console.log(fn1("x","jz"))
//"xjz"

如果说function的实例化对象的__proto__都指向了function对象的prototype属性,那么function对象本身的__proto__都指向了Function.prototype(Function也是一个函数对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以Function是被自身创建的。所以它的__proto__指向了自身的Prototype。)

Object.__proto__ === Function.prototype
//true

终极原型链图示


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

推荐阅读更多精彩内容

  • 在JS中,原型链是一个重要的概念,不管是继承还是属性值的查找中,都用到了原型链的基本知识,有些朋友经常问我一些关于...
    彬_仔阅读 5,488评论 2 20
  • 请移步:https://blog.cdswyda.com/post/20161121
    依韵宵音阅读 2,875评论 0 17
  • 在JavaScript中,原型链作为一个基础,老生长谈,今天我们就来深入的解读一下原型链。 本章主要讲的是下面几点...
    Devinnn阅读 5,229评论 1 6
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 8,081评论 4 14
  • 你不讨人喜欢,我的诗句。你贮藏我的悲喜,但又安静少语。 你总是迟来,无处可寻。而当你扣响我的门窗时,我也不乐意放你...
    陈果_周绿阅读 3,882评论 0 3