1. class创建
class Person {
}
new Person();
2. 类:constructor构造函数
class Person {
constructor(name) {
this.name = name;
}
}
let str = new Person('张三')
console.log(str.name);
let p = class Father {
constructor(name, age) {
this.name = name;
this.age = age;
}
sing() {
console.log('就是要唱歌');
}
}
let obj1 = new p()
console.log(p.name);
console.log(p.age);
console.log(p.sing());
obj1.sing();
总结:
1. 通过class关键字创建类,类名我们还是习惯性定义首字母大写;
2. 类里面有个constructor函数,可以接受传递过来的参数,同时返回实例对象;
3. constructor函数只要new生成实例时,就会自动调用这个函数,如果我们不写这个函数,也会自动生成这个函数;
4. 生成实例new不能省略;
5. 注意语法规范,创建类时,类名后面不要加小括号,生成实例类后面加小括号,构造函数不需要加function;
6. 类表达式也可以定义类,类表达式可以命名或不命名,命名表达式的名称是该类题的局部名称。
3. 类中添加方法
1. 类中的所有函数都不需要加function;
2. 多个函数方法之间不需要逗号分割,不然会报错;
3. 方法还可以传递函数,类中的公有属性是放到constructor里面的,调用的时候一定要加new,一调用就会自动执行constructor构造函数。
class Person {
constructor(name) {
this.name = name;
}
sing(param) {
console.log(this.name + param);
}
}
let p = new Person('张三');
p.sing('-----暗里着迷')
4. 类的继承
class Father {
constructor() {
}
sing() {
console.log('就是要唱歌');
}
}
class Son extends Father {
}
let son = new Son();
son.sing();
5. super关键字
1. super关键字用于访问和调用对象父类上的函数;
2. 也可以调用父类的构造函数,也可以调用父类的普通函数;
3. 需要注意的是:子类在构造函数中使用super时,必须放到this前面。
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
say() {
console.log(this.name + ":" + this.age);
}
}
class Student extends Person {
constructor(name, age, sex) {
super(name, age);
this.sex = sex;
}
}
var student = new Student("admin", 12, "male");
student.name;
student.sex;
student.say();
总结:继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的,如果子类里面没有,就去查找父类有没有这个方法, 如果有,就执行父类的这个方法(就近原则)
6. static
static只能通过类来访问,即static只能通过类自身来调用,不能通过类的实例来调用
class Father {
constructor(name, age) {
this.name = name;
this.age = age;
}
sing() {
console.log(this);
console.log(this.name + '就是要唱歌');
}
static fb() {
console.log(this.name);
}
}
Father.song = function() {
console.log(this.name);
}
let obj2 = new Father('张三', 28)
obj2.sing();
Father.song();
Father.fb();
7. 注意事项:
1. 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象;
2.类里面的共有的属性和方法一定要加this使用;
3. 类里面this的指向问题;
4. constructor里面的this指向实例对象方法。