ES6
面向对象的特性
- 封装性
- 继承性
- 多态性
面向对象的思维特点:
先把共有属性和行为封装成一个类 ,然后对类进行实例化,获取类的对象
类和对象
类是泛指的某一大类,对象是特指的某一个对象
创建类
用class声明一下,然后在下面new一下
class Star {
constructor(name){
this.name = name;
}
}
var xxx = new Star('xxx');
类里面有一个必须要有的函数,就是constructor函数(在生成实例的时候调用),这个函数负责接收参数并且返回给实例对象
类里面的构造函数不需要加function
在类里面添加方法
- 多个方法之间不用添加逗号
类的继承
class Father{
money() {
console.log(1000);
}
}
class Son extends Father{
//子类继承父类
}
class Father{
constructor(x, y){
console.log('xxx');
this.x = x;
this.y = y;
console.log(this.x);
console.log(this.y);
}
money() {
console.log(1000);
}
sum (){
console.log(this.x + this.y);
}
}
class Son extends Father{
}
let demo1 = new Father(1, 2);
let demo2 = new Son(3, 4);
demo1.sum();
demo2.sum();
在子类不设置constructor的情况下,继承是包括constructor函数的,而且里面涉及this的部分也没有出问题,感觉上来看像是把Father里面的东西全部复制粘贴在Son里面似的,可以不使用super
super关键字
可以调用父类中的构造函数和普通函数
调用构造函数是在constructor里面直接super(),括号里面是参数
例如
constructor(x, y){
super(x, y);
}
money() {
console.log(super.money());
}//调用普通函数
调用super必须在子类使用自己的this之前
- 类没有变量提升
- 共有的属性和方法在使用前必须加this
constructor(x, y){
this.x = x;
this.y = y;
this.sum();//方法前面的this,因为constructor是在new的时候就执行的,所以直接就执行了sum函数
}
sum (){
console.log(this.x + this.y);//传递的参数前面的this
}
可以用全局变量存储实例的this,以便在类里面绑定事件调用的时候使用正确的this