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!