ES6初始,类和对象 -- 暑假Day4

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

猜你喜欢

转载自blog.csdn.net/weixin_50948265/article/details/118737601