原型链神图

一、神图1

image

二、神图2

image

三、构造函数、对象及其原型

image

image

四、用来验证自己想法的小代码

let arr = []
function* f () {
  /* t    */    yield arr.__proto__ === Array.prototype
  /* t    */    yield Array.__proto__ === Function.prototype
  /*    f */    yield arr instanceof Function
  /*t     */    yield Object instanceof Function
  /*t     */    yield Object.__proto__ === Function.prototype
  // 所有的 [[Prototype]] 都是 Object 实例
  // 所以原型链是怎么回事?一个arr实例怎么通过原型链找到 Array 并找到 Function 最后找到 Object?
  // arr的原型链中没有Array也没有Function,但是可以通过constructor找到Array再通过原型链找Object
}
for (const x of f()) {
  console.log(x);
}

五、总结

对象的父母都是函数(constructor),不像经典OOP语言中,对象的父母是类
继承看的是原型链上各个[[Prototype]]即原型对象之间的关系
原型都是对象,原型的“父类”都是 Object.Prototype

posted @ 2023-01-07 11:32  dou_fu_gan  阅读(16)  评论(0编辑  收藏  举报