基于原型链的继承方式
继承属性
let f=function(){
this.a=1;
this.b=2;
}
let o=new f();
f.prototype.b=3;
f.prototype.c=4;
console.log(o.b) //2 b是o的自身属性,所以输出2
console.log(o.c)//4 c是o的自身属性吗?不是的,查找o的__proto__是否存在c属性,存在,值为4
console.log(o.d)//undefined d是o的自身属性吗?不是的,查找o的__proto__是否存在d属性,不存在,o.[[Prototype]].[[Prototype]] 为 null,停止搜索
- 属性查找顺序:自身属性-->__proto__属性-->__proto__的属性__protyo__属性 直到找到或者原型为undefined为止
- 获取原型的属性方法,es6新增方法 Object.getPrototypeOf() 和Object.setPrototypeOf()
继承方法
let o={
a:2,
m:function(){
return this.a+1
}
}
let b=Object.create(o);//b是集成o的对象
b.a=5;//创建b的自身属性a
b.m()//6 调用b.m方法的时候,this指向的是b这个对象,b.a=5,所以b.m()返回6
MDN