ECMAScript6-继承

类Class

简化,简化,还是简化,简化代码量,简化操作。下面列举出简化的内容:方法定义语法、类定义语法。下面依次分开来讲:

方法定义语法

①添加函数属性:不再使用function方式添加方法,而是直接使用属性名作为函数名的方式来取代关键字function。

②添加生成器函数属性:在标准函数名的前面添加一个*即可。

③添加标准的访问器函数属性:通过get/set关键字直接在行内定义访问器,这种方式下的get方法不能接受参数,而set方法至少接受一个参数。

④添加预计算(computed)属性名:用[]包裹的属性就是预计算属性,可以使用symbol、调用函数、连接字符串等。

类定义语法

①通过constructor属性来指定属于JS版本的构造函数。

②通过static关键字,之前是通过prototype属性来向构造器添加属性,这样所有的对象都可以拥有新增的属性,这里可以通过static关键字来取代prototype的效果。

子类

这里ECMAScript6明确说了,其继承系统参考了JAVA语言,那么,按照JAVA语言的来讲继承的话,其关键字无非下面几个:extends、super,下面就说说这2个关键字在ES6中的使用细节。

extends

class Children extends Parent{}通俗来讲extends使得子类继承父类的static属性、static方法、实例属性、实例方法。(跟JAVA一样,这里其实没什么多讲的,主要是constructor方法的prototype属性需要多注意下,constructor方法控制着static方法)

super

跟JAVA一样,略过。

注意:一般情况下通过new调用构造函数时this对象即被创建。因此,在子类的构造函数中,调用super构造函数之前访问this会触发一个引用错误(ReferenceError)。

new.target

假如自定义了Collection下面有一个list子类,一个set子类,当new list/set时,JS需要知道list/set的父类Collection的constructor方法的prototype属性指向哪里,所以出现了这个新关键字new.target。

当new.target用在constructor方法时,其会通过super()方法把子类的new.target值传递给父类,因此list/set通过new.target把自己的class名称传递给了Collection。

new.target在任何函数中都是合法的,如果函数不是通过new 调用,new.target将被赋值为undefined。

注意:JavaScript没有实现类的多继承。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值