原型链

原型链

官方文档:

JavaScript是面向对象的,每个对象身上都有一个 __proto__ 属性,该属性指向它的原型对象,当对象在查找一个属性的时候,自身没有就根据 __proto__ 向它的原型进行查找,如果还没有,那么就顺着它原型的原型继续查找,直到 Object.prototype.__proto__ 为 null。这么一条用 __proto__ 串联起来的对象链状结构,就称之为原型链。每一个对象数据类型都有一条属于自己的原型链

指向关系如图:

注意:

  1. 只有函数才有 prototype 属性,对象没有

  2. 每个对象身上都有 __proto__ 属性

  3. 函数与对象的关系:函数拥有对象的所有能力,并且函数还拥有额外的技能:可被调用、拥有 prototype 属性等。

    函数就是对象,它是 Function 类型的实例

我们为什么要把属性放到原型上?

如果我们放在构造函数中,那么每次 new 实例的时候,都会为这个属性分配内存空间;如果放在原型上,那么实例中就不用为这个属性分配空间了。

注意:虽然函数也是对象,也能直接往它上面添加属性,但函数的 name 属性是默认指向函数名的,所以不要添加 name,要添添其它的

相关链接:

https://www.bilibili.com/video/BV1LY411d7Yt/?p=8&share_source=copy_web&vd_source=6bac919d0e003af4419677ae239707bf

posted @ 2022-06-29 11:03  朱在春  阅读(138)  评论(0编辑  收藏  举报