原型分为显示原型(prototype)隐式原型(__proto__)。
其对应的原型关系如下:
1.每个class都有显示原型prototype。
2.每个对象实例都有一个隐式原型__proto__指向对应的class的prototype。
3.对象实例的__proto__指向对应的class的prototype。

基于原型的执行规则
获取属性xialuo.name或者执行方法xialuo。sayHi()时:
1.先在自身属性和方法寻找。
2.如果找不到则自动去__proto__中查找,若一直往上查找到Object这个顶级对象仍未找到,则返回Object.prototype.__proto__下的值为null。

什么是原型链?
答:每个实例对象(object)都有一个私有属性(__proto__ )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 null。由此形成的链式结构称为原型链。

其图示如下所示:
image.png

其对应代码如下所示:

class Person{
   constructor(name, number){
     this.name = name;
     this.number = number;
   }
    eat(){}
};
class Student extends Person{
    constructor(name, number){
     super(name, number)
   }
    sayHi(){}
}

let xialuo = new Student();

//其关系如下:
xialuo.__proto__ = Student.prototype;
console.log( xiaoluo.hasOwnProperty("name") )//true
console.log( xiaoluo.hasOwnProperty("eat") )//false
xialuo.instanceof Student //true
xialuo.instanceof Person //true
xialuo.instanceof Object //true

爱吃鸡蛋饼
55 声望8 粉丝

« 上一篇
vue知识点拾遗
下一篇 »
ES6新特性拾遗