ES6-class关键字

class 关键字

es6 新增了 class 关键字,这是 es6 的新语法,用来实现 es6 中面向对象编程;可以通过该关键字来定义类。

class不存在变量提升,所以需要先定义再使用。

ES5:

  1. // 定义一个构造函数
  2. function Person(name, age) {
  3. this.name = name
  4. this.age = age
  5. }
  6. // 创建 preson 实例
  7. var person= new Person('小白', 16)
  8. console.log(preson)

在这里插入图片描述

ES6:

语法:

  1. class name {
  2. // ...
  3. }

示例:

  1. // 定义一个类
  2. class Person {
  3. // 类的构造方法;不管写不写,类在 new 时都会被调用,构造方法默认返回 this
  4. constructor(name, age) {
  5. this.name = name
  6. this.age = age
  7. }
  8. // 不需要使用 , 逗号
  9. // 类的一般方法,不需要使用 “function” 关键字;方法定义在实例对象的原型上
  10. say() {
  11. console.log()
  12. }
  13. // 定义静态属性
  14. // 静态属性
  15. static info = { name: '小白', age: 16 }
  16. }
  17. let per = new Person('小白', 16)
  18. // 打印实例
  19. console.log(per)
  20. // 不能通过实例访问静态属性
  21. console.log(per.info)

在这里插入图片描述

constructor

constructor:类的构造方法,通过 new 生成对象实例时,会自动调用该方法。

  • constructor 方法如果没有显式定义,会隐式生成一个 constructor 方法
  • constructor 方法默认返回实例对象this,但是也可以指定 constructor 方法返回一个全新的对象,让返回的实例对象不是该类的实例
  • constructor 外声明的属性都是定义在原型上的,可以称为原型属性
static

static 关键字可用于定义静态属性;静态属性可以通过类名直接访问;

实例属性:只能通过类的实例,来访问的属性 ;

静态方法挂载到构造器上,通过类名来访问;

实例方法挂载到原型上,每一个 new 的实例对象都可以使用这些实例方法

extends 关键字

extends关键字用来创建一个普通类或者内建对象的子类;该类继承了父类的所有属性和方法,父类的属性和方法默认添加到子类的原型上。

语法:

  1. class ChildClass extends ParentClass { ... }
  • ChildClass 子类
  • PrentClass 父类
super

super 这个关键字,既可以当作函数使用,也可以当作对象使用。当作函数使用时,super 代表父类的构造函数,并在子类中执行 Parent.apply(this),从而将父类实例对象的属性和方法,添加到子类的 this 上面

子类必须在其 constructor 方法中显示调用 super 方法;只有调用 super 之后,才可以使用 this 关键字(子类没有自己的 this 对象),否则会报错

super() 只能用在子类的 constructor 方法之中,用在其他地方同样会报错

示例:

  1. // 创建一个类作为父类
  2. class Parent {
  3. constructor(name, age) {
  4. this.name = name
  5. this.age = age
  6. }
  7. say() {
  8. console.log('say')
  9. }
  10. // 静态属性
  11. static info = { nick: '熊熊'}
  12. }
  13. // 通过 extends 创建子类
  14. class Chinese extends Parent {
  15. constructor(name, age, gender) {
  16. // 调用 super 方法,这个 super 表示父类中 constructor 的引用
  17. // 将子类 constructor 的 name,age 通过 super 传给父类中的 name 和 age 属性
  18. super(name, age)
  19. this.gender = gender
  20. }
  21. }
  22. // 创建实例对象
  23. let p1 = new Chinese('熊二', 18, 'boy')
  24. // 打印实例
  25. console.log(p1)
  26. // 子类可以继承父类的所有,子类都能继承到
  27. console.log(Chinese.info)

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6 super关键字

    我们知道,this关键字总是指向函数运行时所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象。 let prop = {