ES6新增继承方式:类class
- 通过类创建对象
- 类用来管理构造函数和原型
- 类名不能重复声明
- 类不会被预解析提升
class ClassName{
constructor(name){ //用constructor()构造函数初始化对象的属性方法
this.name = name; //初始化创建的对象的属性
this.move = function(){console.log(this.name+this.age)} //初始化对象的属性方法,该做法是占内存的,和构造函数那个创建同理
}
move1(){console.log(this.name+this.age)};//创建move1()方法,该方法是添加在原型上的这个方式不占内存
age = 18;//给对象属性赋值,就是直接初始化对象的属性方法,与this.name = name同作用
}
let obj = new ClassName("gg");//通过类创建对象
obj.move();
obj.move1();
console.log(obj);
- extends 继承一个类
用extends继承可以继承到ClassName里面的所有方法,相当于构造函数的联合继承方式
class People extends ClassName{
//这里面会自动把constructor(){}里的this指向了ClassName里面,如果写了constructor(){}就没有效果需要用super()调用父类对象
}
let p1 = new People("zz");
p1.move();
p1.move1();
console.log(p1);
- 注意点:
extends继承类时:创建子类对象时,会先创建父类对象,再根据父类对象创建子类对象,所以创建子类对象时其实是创建了两个对象 - super 调用父类的构造方法
在constructor中直接super(形参)是获取父类的所有方法
在constructor外的函数中super.方法名或对象名是指定调用父类的某个方法,这时要删掉constructor