原型链神图
一、神图1
二、神图2
三、构造函数、对象及其原型
四、用来验证自己想法的小代码
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