继承与原型链

基于原型链的继承方式

继承属性

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

posted @ 2022-05-12 10:40  mengxiangzhi  阅读(20)  评论(0编辑  收藏  举报