浅谈JavaScript的继承

关于JavaScript的继承问题,大概是看了三本书之后才有点感悟,最后看了一篇博文,就突然有自己写博的冲动。

继承之所以存在,是因为继承可以实现代码复用,把公共部分提取出来1以供多个函数一起使用。

关于继承,可以分为四部分讲。

第一部分,继承实例的属性。

这个技巧的特点是父函数不通过new调用,仅仅把其当普通函数嵌套在子函数内使用。

function  Sub( pro1, pro2, pro3){
     Super. call( this, pro1, pro2);
     this. pro3= pro3;
}
当通过new 调用Sub时,其this值指向一个新的实例,新的实例通过this值传递给Super,Super添加自己的实例属性。


结果运行:


第二部分,继承原型属性。

通过把父函数的原型赋值给子函数,达到继承的目的。


但是这个方法是有缺点的。由于JavaScript的引用机制,当你修改了Sub.prototype的时候,也即修改了Super.prototype,他们共享一块内存。特别注意一点,我们还需要设constructor属性回归正常,因为Sub.prototype=Super.prototype这一步修改了原有实例原型的constructor正确值。

下面看看例子:


运行结果:


Sub.prototype=Super.prototype其实就是Sub.prototype=Object.create(Super.prototype);

第三部分,原型是父构造函数的实例。

Sub. prototype= new  Super();

ES5不推荐这么做,因为这么做Sub会拥有所有Super实例的属性,但这对Sub并没有什么好处。

第四部分,多重继承。

所谓多重继承就是一个子对象中有多个父对象的属性,若属性重复,后面继承到的覆盖前面所继承的。


运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值