Open cyrushine opened 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 实现了面向对象的 继承 功能
Parent
prototype
class
继承
p1 是一个普通的对象,所有对象都有一个属性 __proto__ 指向它的父对象的 prototype:p1.__proto__ === Parent.prototype 为真,所有满足上面判断的都是父子关系
p1
__proto__
p1.__proto__ === Parent.prototype
p1 在查找属性时(成员属性 or 成员函数)先查找自己有没有,没有的话通过 __proto__ 查找父对象的 prototype,没有继续查找祖先的 prototype,这就是原型链
所有子对象都有 constructor 指向构造自己的构造函数:p1.constructor === Parent 为真
constructor
p1.constructor === Parent
https://juejin.cn/post/6982485346474803207
javascript 是真面向对象,只有对象没有类,没有类 class 那怎么构造实例?怎么表达父子关系?答案是原型 prototype
Parent
是一个函数类型的对象,所有函数对象都有一个属性prototype
,它替代了消失的类class
实现了面向对象的继承
功能p1
是一个普通的对象,所有对象都有一个属性__proto__
指向它的父对象的prototype
:p1.__proto__ === Parent.prototype
为真,所有满足上面判断的都是父子关系p1
在查找属性时(成员属性 or 成员函数)先查找自己有没有,没有的话通过__proto__
查找父对象的prototype
,没有继续查找祖先的prototype
,这就是原型链所有子对象都有
constructor
指向构造自己的构造函数:p1.constructor === Parent
为真