继承的几种方式和理解(读书笔记)

继承(原型链是实现继承的主要方法)
通过new关键字实现的
当A要继承Q时
A.prototype=new Q();//ok
分析一下  new Q()==》建立一个对象,没有名字
A.prototype本来就是一个对象 重新赋值(原来的原型就没有了)
等价于对象1赋值给对象2而已了 ,就这样,相当于对象2的原型就是对象1的一个实例
当然就有对象1的所有属性的方法了
从而A(Q的对象,A的原型)还有了一个指针指向Q的原型
A.prototype.__proto__==Q.prototye


记住有一点,所有引用类型默认都继承了Object(这里引用类型指的是A的原型)


确定原型和实例的关系
(实例 instranceof 原型)//使用方式(原型链上出现过的构造函数就返回true)
另外 一种方法isPrototype   例如:Object.prototype.is///


原型链上实现继承时,不能使用对象字面量创建原型方法(这样会重写原型链)


借用构造函数(解决引用类型带来的问题,(同样是一个方法的实例,修改A的属性导致B的属性改变了))


apply call方法
这样的优势
1.可以像超类传参数
2.问题,方法都在构造函数内部(无法复用)


组合继承
继承的构造方法内//继承属性
{ father.call(this);  }
继承的构造方法外
son.prototype=new father();//集成方法,因为父亲的方法写在原型上
这个应该是标准继承(缺点,调用了2次超类构造方法,下面有更好的继承方法)


原型式继承
fun  object(o){
function F(){};
F.prototype=o;//这里搞到了父亲方法的引用,(就是父亲方法),也是缺点(共享了)
return new F();//这里相当于new了一个父亲的对象出去
}
es5新增了Object.create()方法规范了这种继承(2个参数)
1个用作新对象原型的对象和(可选)一个为新对象定义额外属性的对象
传一个参数于object函数相同


var son=Object.create(father, {name: { value:"liu" }});//集成方式


寄生方式继承


寄生组合继承//最最最规范的方式
function   inherit(son ,  father){
var prototype=object(father.prototye);//创建对象
prototype.constructor=son;//增强对象
son.prototype=prototype;//指定对象,完成继承
//感觉像是拼接这个原型 画图好理解,现有原型,在原型上把基础的
//constructor属性拼接好,再把完整的东西送出去
}


学完这章的完美继承案例附带注释
function object(obj){
var F=function(){};
F.prototype=obj;
return new F(); //返回一个空函数,空函数有传入的对象
}
//这个例子这里就是获取一个带父亲原型的空函数
function inherit(son , father){
var prototype=object(father.prototype);//对象有了父亲的原型
prototype.constructor=son;//想继承的son有了父亲的原型并且把指针指向自己
son.prototype=prototype;//继承结束,把这个包含父亲东西的原型重写son的原型
}
//完善上面的那个object
function Father(){
this.name="lu";
}


Father.prototype.getName=function(){
return this.name;
};


function Son(){
Father.call(this);
};


inherit(Son,Father);//这里继承了
var temp=new Son();
alert(temp.getName());//打印出Lu
他们之间的关系
alert(temp.constructor.prototype.__proto__==Father.prototype);//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值