原型分为显示原型(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。由此形成的链式结构称为原型链。
其图示如下所示:
其对应代码如下所示:
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。