es6-Class的使用

类的创建

  • 创建类
    class name {
        // class body
    }
  • 创建实例:
    var xx = new name();
    // 注意 类必须使用new实例化对象

constructor构造函数

  • constructor() 方法是类的构造函数的默认方法 ,用于传递参数,返回实例对象

  • 在 new 生成对象实例时会自动调用该方法,如果类中没有定义,会自动创建一个constructor()函数

  • 创建类

    1.创建类class
    class Star {
        constructor(uname) {
            this.uname = uname;
        }
    }
    2.实例化类
    var lmk = new Star('刘德华');
    console.log(lmk.uname) // 打印结果为 刘德华
    // 实例化类的时候 我们在括号内传递了一个字符串,这个字符串会传入 ,constructor函数中的uname形参中,这个形参有传递给this.uname

在类中添加方法

  • 添加共有方法的类
    1.创建类class
    class Star {
        constructor(uname) {
            this.uname = uname;
        }
        gyff(value){
            // 这是一个类的共有方法
            console.log(this.uname+'调用了共有方法,并传入了一个'+value+'值')
        };
    }
    // 类中的所有函数都不需要写function
    // 多个函数方法之间不需要添加逗号分隔
    2.实例化类
    var lmk = new Star('刘德华');
    3.调用方法
    lmk.gyff(123); //输出结果:刘德华调用了共有方法,并传入了一个123值

类的继承以及super

  • 子类可以继承父类的方法
// 定义父类
class Father{ 

}

// 定义子类
class son extends Father{
    //子类继承父类
}
// 子类可以继承父类的所有的属性和方法

super关键字

  • super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数
// 定义父类
class Fl {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
    money() {
        console.log(100);
    }
    sum() {
        console.log(this.x + this.y);
    }
}

// 定义子类
class son extends Fl {
    constructor(x, y) {
        super(x, y); // 调用了父类中的构造函数 通过把子类的值用super函数传递给父类可以实现调用父类的方法
    }
}

// 实例化类
var sons = new son(1, 2); 
sons.money(); // 子类调用父类的方法
sons.sum(); // 子类调用父类的方法
  • super调用父类方法
    // 如果父类和子类存在相同方法可以用super调用父类的方法或者改写方法
    
    // 定义父类
    class Father {
        // 定义父类的方法
        say() {
            return 'bb'
        }
    }
    
    // 定义子类
    class Son extends Father {
        // 定义子类的方法
        say() {
            
            console.log('er'); 
            // 用 super调用父类中的方法
            console.log(super.say());
            // super.sar()就是调用父类中的普通函数 say()
        }
    }
    
    // 实例化子类
    var son = new Son();
    // 调用say函数
    son.say(); // 输出的是 er 和 bb
    
    
    // 继承中,如果实例化子类输出一个方法,先看子类有咩有这个方法,如果有就先执行子类的
    // 继承中,如果子类中没有该方法,就去父类找有没有该方法,如果有就执行父类中的方法
    // 继承的查找原则,就近原则

类和super注意点

  • 子类在构造函数中使用super,必须放到this的前面才可以(必须先调用父类的构造方法,在使用子类的构造方法)
class Fl {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
    money() {
        console.log(100);
    }
    sum() {
        console.log(this.x + this.y);
    }
}

// 定义子类
class son extends Fl {
    constructor(x, y) {
        super(x, y);  //必须在定义this之前使用super函数
        this.x = x;
        this.y = y;
    }
}
  • 在es6中类没有变量提升,所以先定义类,才能实例化对象
  • 在类中的共有属性和方法,一定要加this使用

this指向问题

var that;
// 创建类
class Star {
    constructor(uname) {
        this.uname = uname;
        // constructor里面的this指向的是 创建的实例化对象
        that = this;  // 用that保存当前this
        console.log(this) // 打印this 指向的Star
    }
    gyff(){
        console.log(this);
        // 在函数中this是谁调用它this就指向谁
    };
}

// 创建实例
var lmk = new Star('刘德华');
console.log(that === lmk);  // 返回的是true 也就是说 constructor里面的this指向的是lmk这个实例对象
lmk.dance(); // 调用类中的方法  输出结果是 lmk这个Star

本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!