类声明

class PersonClass {
    constructor(name) {
        this.name = name
    }

    sayName() {
        console.log(this.name)
    }
}
let person = new PersonClass('one')
person.sayName() // one

console.log(person instanceof PersonClass) // true
console.log(typeof PersonClass) // function
console.log(typeof PersonClass.prototype.sayName) // function

类声明只是基于已有自定义类型声明的语法糖。虽然类与自定义类型之间有诸多相似之处,但是仍有以下差异:

  • 函数声明可以被提升,而类与let声明类似,不能被提升;真正执行声明语句之前,他们会一直存在于临时死区中;
  • 类声明中的所有代码将自动运行在严格模式下,而且无法强制让带吗脱离严格模式执行;
  • 在自定义类型中,需要通过Object.defineProperty()方法手动指定某个方法为不可枚举;而在类中,所有方法都是不可枚举的;
  • 每个类都有一个名为[[Construct]]的内部方法,通过关键字new调用那些不含[[Construct]]的方法会导致程序抛出错误;
  • 使用除关键字new以外的方式调用类的构造函数会导致程序抛出错误;
  • 在类中修改类名会导致程序报错。

类表达式

类和函数都有两种存在形式:声明形式和表达式形式。

let PersonClass = class {
    constructor(name) {
        this.name = name
    }

    sayName() {
        console.log(this.name)
    }
}

results matching ""

    No results matching ""