cyrushine / bookmark

4 stars 1 forks source link

一张图搞定JS原型&原型链 - 掘金 #55

Open cyrushine opened 1 year ago

cyrushine commented 1 year ago

https://juejin.cn/post/6982485346474803207

javascript 是真面向对象,只有对象没有类,没有类 class 那怎么构造实例?怎么表达父子关系?答案是原型 prototype

// 如何构造实例/对象

var Parent = function() {
    // 定义一个函数,那它只是一个普通的函数,下面我们让这个函数变得不普通
}

// 这时这个 Parent 就不是普通的函数了,它现在是一个构造函数。因为通过 new 关键字调用了它
// 创建了一个 Parent 构造函数的实例 p1
var p1 = new Parent();

Parent 是一个函数类型的对象,所有函数对象都有一个属性 prototype,它替代了消失的类 class 实现了面向对象的 继承 功能

p1 是一个普通的对象,所有对象都有一个属性 __proto__ 指向它的父对象的 prototypep1.__proto__ === Parent.prototype 为真,所有满足上面判断的都是父子关系

p1 在查找属性时(成员属性 or 成员函数)先查找自己有没有,没有的话通过 __proto__ 查找父对象的 prototype,没有继续查找祖先的 prototype,这就是原型链

所有子对象都有 constructor 指向构造自己的构造函数:p1.constructor === Parent 为真

image