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();
上一篇下一篇

猜你喜欢

热点阅读