javascript高级程序设计11
2022-03-29 本文已影响0人
glassUp
类
ES6中引入的class关键字具有正式定义类的能力,类背后的思想仍然是原型和构造函数的概念,其实完全可以把类看成是构造函数的另一种写法,因为类本身就指向构造函数
需要注意的点:
1.调用类构造函数必须使用new操作符,普通构造函数一般也用new调用,但是可以不用new调用,这时就会以windows作为内部对象
2..类的方法都定义在prototype对象上面,所以类的新方法可以添加在prototype对象上面。Object.assign方法可以很一次向类添加多个方法。
3.prototype对象的constructor属性,直接指向“类”的本身
4..constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。
5.类不存在变量提升
class Animal {};
class Person{
constructor(){
console.log('p')
}
};
class Vegatable{
constructor(){
this.color = 'orange' //构造函数内部的this被赋值为这个新对象
}
};
let a = new Animal();
let p = new Person(); //p
let v = new Vegetable();
console.log(v.color) //orange class实例化之后,内部的this其实就是指这个实例对象
//在类的原型上增加方法
Object.assign(Animal.prototype,{
方法1,
方法2
})
6.super() 方法引用父类。
通过在 constructor 方法中调用 super() 方法,我们调用了父级的 constructor 方法,获得了父级的属性和方法的访问权限
创建类继承,使用 extends 关键字。
class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return 'I have a ' + this.carname;
}
}
class Model extends Car {
constructor(brand, mod) {
super(brand);
this.model = mod;
}
show() {
return this.present() + ', it is a ' + this.model;
}
}
let myCar = new Model("Ford", "Mustang");
document.getElementById("demo").innerHTML = myCar.show();