Class 继承

ES6中引入了 Class(类)这个概念,作为对象的模板。通过class关键字,用于定义一个类。

官方文档中这样介绍class

ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

简单来说class 的出现可以让我们操作对象的时候更加的简单方便。
用一个例子简单记述一下使用方法

class People{
	// 定义一个类 (声明了一个构造函数People)
    constructor(name) { //constructor用于接收传递的形参
        this.name = name;  
    }
    sayhello() { //在people的对象上挂载一个方法
        console.log(`${this.name},hello!`);
    }
}
const  people = new People("小明")
people.sayhello()  // 打印结果为 '小明,hello!'

class 用作继承

  class People {
        // 定义一个类 
        constructor(name) { //constructor用于接收传递的形参
            this.name = name;
        }
        sayhello() { //在people的对象上挂载一个方法
            console.log(`${this.name},hello!`);
        }
    }
    class Student extends People {
        constructor(name, grade) {
            super(name) //调用super关键字
            this.grade = grade;
        }
        message() {
            console.log(`${this.name},${this.grade}`);
        }
    }
    const student = new Student("小明","五年级")
    student.message()  // 打印结果为 小明,五年级
    student.sayhello() // 打印结果为小明,hello! 继承了People中的sayhello的方法

这里详细说一下 super关键字的作用
super关键字既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。
注意:
1、使用super的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错;
2、由于对象总是继承其他对象的,所以可以在任意一个对象中,使用super关键字。
一、作为函数使用时
当super作为函数调用时,代表父类的构造函数。(ES6要求子类的构造函数必须执行一次super函数,并且只能用在子类的构造函数中)

class A {}
class B extends A {
  constructor() {
    super();
  }
}

这里super代表的是父类A的构造函数,返回的却是子类B的实例,即super内部的this指的是子类B的实例,因此在这里super()相当于A.prototype.constructor.call(this)

二、作为对象调用

class A {
  p() {
    return 2;
  }
}
class B extends A {
  constructor() {
    super();
    console.log(super.p()); // 2
  }
}
let b = new B()

1、在普通方法中,super指向父类的原型对象(super指向A.prototype);
(1)、因为super指向的事父类的原型对象,所以定义在父类实例上的方法或属性(即构造器constructor中定义的属性和方法)无法通过super调用。
(2)、在子类普通方法中通过super调用父类的方法时,方法内部的this指向当前的子类实例,所以如果通过super对某个属性进行赋值,这时super就是this,赋值的属性会变成子类实例的属性。

2、在静态方法中,super指向父类。
在子类的静态方法中通过super调用父类的方法时,方法内部的this指向当前的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值