一、类和对象
1. 对象
一个具体的事物,在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,如字符串、数值、数组、函数等
对象是由属性和方法组成的:
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示(常用动词)
2. 类 class
在ES6中新增了类的概念,可以使用class关键字声明一个类,之后用这个类来实例化对象
类抽象了对象的公共部分,它泛指某一大类(class)
对象特指某一个,通过类实例化一个具体的对象
3. 创建类
class name{
// class body
}
创建实例:
var xx = new name();
注意:类必须使用new实例化对象
4. 类 constructor 构造函数
constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。如果没有显示定义,类内部会自动给我们创建一个constructor()
类中所有的函数不需要写function
多个函数/方法之间不能添加逗号分隔
class Star {
constructor(uname, age) {
this.uname = uname;
this.age = age;
}
sing(song) {
console.log(this.uname + song);
}
}
var xx = new Star("fivexx", 24);
console.log(xx);
xx.sing("我不活啦!");
二、类的继承
子类可以继承父类的一些属性和方法 extend关键字
super关键字,调用父类的函数,可以调用构造函数,也可以调用普通函数
super() 就是调用父类的构造函数,super.函数名() 就是调用父类中的普通函数
继承中的属性或方法查找原则:就近原则
class Father{ //父类
}
class Son extends Father{ //子类继承父类
}
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x, y) {
super(x, y); //调用了父类中的构造函数constructor()
}
}
var son = new Son(41, 21);
son.sum();
class Father {
constructor(x, y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x, y) {
super(x, y); //调用了父类中的构造函数constructor()
// super必须在子类this之前调用
this.x = x;
this.y = y;
}
substract() {
console.log(this.x - this.y);
}
}
var son = new Son(41, 21);
son.substract();
son.sum();
子类在构造函数中使用super,必须放到this前面(必须先调用父类的构造函数方法,再使用子类的构造方法)
三个注意点:
1. 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象。
2. 类里面共有的属性和方法(如果在构造函数中直接调用 this.sum(); )一定要加this使用。
3. 类里面的this指向问题,constructor里面的this指向实例对象,方法里面的this指向这个方法的调用者。
insertAdjacentHTML() 方法创建元素