试着几句话说明白原型链。
JavaScript中的原型链是用于实现面向对象中的继承。JavaScript所有实例都有一个__proto__属性记载了自己的创建原型。这个值是谁写入的呢?是由实例的构造函数写入的,构造此实例的function的函数有一个属性叫 prototype。每次创建实例的时候,就把prototype赋值给实例的__proto__。
function a (){
console.log(a.prototype);
}
let s = new a();
console.log(s.__proto__);
console.log(s.__proto__ === a.prototype)
唯一有点怪的是,javascript中所有的function都有可能是构造函数,而class中的constructor函数才有prototype。所以不能用class的其他function创建实例。
class F{
constructor(){
this.i = 0;
}
}
//const handle1 = new F.add(); //不允许
const handle2 = new F();
console.log(handle2.__proto__);// F()
console.log(handle2.prototype);//undefined
总的来说新的ES6标准还是希望大家用class 和 extends 的,原型链看明白就行了,不用过于纠结。