Skip to main content

一图秒懂原型链

· One min read
wang bo
早睡早起

原型链中 __proto__ , prototype , constructor 总忘哪个是哪个,索性画了个图,忘记是好复习

一图秒懂原型链#

一图秒懂原型链.jpg

补充#

1. constructor#

function Person() {
}let person = new Person();console.log(person.constructor === Person)

寻找person.constructor时,person中读不到constructor,会按照原型链往上找,找到Person.prototype时找到constructor,此时person.constructor指向Person构造函数。

Person.constructor === Person.prototype.constructor

2. __proto__#

__proto 并不存在于Person.prototype中,实际上,它是来自于Object.prototype, 与其说成是一个属性,不如说成getter/setter,当使用obj.__proto时,可以理解返回了Object.getPrototypeOf(obj)。

3. 叫做继承合适吗?#

我们经常会听到这样一句话:“每一个对象都会从原型链继承属性”,但是继承意味着复制操作,but JavaScript默认不会复制对象的属性,会在两个对象中创建一个关联。这样,一个对象就可以通过委托去访问另一个对象的属性和函数。

与其叫做继承,不如叫做委托。