JavaScript中 class与构造函数类似,但是规定了额外的效果,如继承、多态、封装
传统的 JS 只有 对象 的概念,没有class类的概念,因为 JS 是基于原型的面向对象语言,原型对象特点就是将属性全部共享给新对象
但 ES6 引入了 class 类这个概念,通过 class 关键字可以定义类,这就是更符合我们平时所理解的面向对象的语言
// 定义一个名为Person的类
class Person{
// 构造函数,用来接受参数
constructor(x,y){
this.x = x; // this代表的是实例对象
this.y = y;
}
todoSome(){ //这是个类的方法,不需要加function,有多个方法也不用逗号隔开
alert(this.x + “的年龄是” +this.y+”岁”);
}
}
constructor 构造函数
该 函数 可以接收传递过来的参数,同时返回实例对象。在类中该函数无需用 function 声明
constructor 函数 只要 new 生成实例时,就会自动调用到这个函数。( 即使我们不写constructor ,系统也会自动生成这个函数 )
class Human{
// 该 函数 可以接收传递过来的参数
constructor(user){
this.user=user;
}
}
extends 继承
继承类的声明,使用 extends 来实现 子类继承父类 的属性 (需要super()) 与方法
super() 可让子类调用父类的构造函数成员,实现属性继承;
// 定义父类
class Human{
constructor(user){
this.user=user;
}
introduce(){
console.log(‘该用户名字为’+this.user);
}
}
//类的继承
class Student extends Human{
constructor(user,score){
// 调用父类构造函数中的成员,可写多个成员
super(user);
this.score=score;
}
// 类方法的复写
introduce(){
console.log(‘该学生名字为’+this.user+’。成绩为’+this.score+’分’);
}
}
new 类的实例化
当类定义完成后,需要实例化才能使用这些方法与属性,在js中 class 类似 于模板的存在。需要实例化 赋值给 变量 后,该变量 将继承 目标类的所有属性和方法
// 实例化 teacher 类并赋值给 变量 smm
let smm = new Teacher(‘屎猫’,’JS’);
// 实例化 teacher 类并赋值给 变量 aipo
let aipo = new Student(‘AIpo’,50);
//调用 类方法
smm.introduce();
aipo.introduce();