原型原型链

原型原型链
Breezli原型原型链
原型
每个 JS 对象(除
null
)都有一个隐藏的[[Prototype]]
属性,指向它的“原型对象”(简称原型)原型对象也是一个普通对象,它包含可以被其他对象共享的属性和方法
作用:存放一些属性和方法 + 在JS中实现继承
原型链
可以通过实例对象的 __proto__
属性访问原型
1 | const arr = new Array(1, 2, 3) |
所有原型对象的终点是null
原型链的顶端通常是 Object.prototype
当访问一个对象的属性或方法时,JS 会沿着对象的原型链逐级向上查找,直到找到该属性或到达原型链的终点(
null
)。
1 | const obj = {}; |
1 | arr.__proto__ //指向Array.prototype |
属性查找会自动沿着原型链进行
1 | function Person(name) { // 构造函数 |
当你写 alice.greet()
时
首先检查
alice
对象本身是否有greet
属性如果没有,则继续检查
alice.__proto__
(即Person.prototype
)如果在
alice.__proto__
上找到了greet
方法,则调用它,*并将this
绑定到alice*
实际上,alice.greet()
是一种语法糖,等价于 alice.__proto__.greet.call(alice)
所以直接推荐使用 alice.greet()
而省略 __proto__