javascript 继承的几种方法

假如我这里有以下两个构造函数:

苹果是果蔬的一种,如何能让apple继承果蔬的属性呢,因为每次都重复创建新的属性效率不高,于是想到了继承,在es6之前,继承要花不少功夫。

一、使用构造函数的call和apply方法:

在一个子构造函数中,可以通过调用父构造函数的call方法或appaly方法来实现继承,类似于Java中的写法。 

但是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。

二、原型链的方法-----prototype模式 

这是 在Fruit 的原型链上定义了species 属性,然后apple1 跳过了Apple,直接继承了Fruit的属性,但是这样会出现一个后果:

 从控制台的输出结果可以看到: Fruit.prototype 和 Apple.prototype 都指向了同一个对象,对Apple 对象的修改都反映到了Fruit上了。因此Fruit 的constructor 属性也变为了 f Apple(  ) { } ;但是比第一种方法节省内存.

对上面的缺点进行改进,就是创建一个空对象作为中介来继承Fruit 的prototype ,然后 Apple 的prototype 指向空对象的实例,而空对象的原型继承自Fruit ,就间接完成了继承。

三、对象属性拷贝完成继承 

创建了一个函数,把那些不变的属性放在原型链上,然后把这些属性拷贝到新的对象 中就可继承到Fruit 的全部在原型链上的属性。

四、es6中用extend 关键字进行类继承,原型会自动调整,通过调用super( ) 方法访问基类的构造函数。

待补充。。。。。。 

 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值