JS中类的定义

吐槽君 分类:javascript

类的定义

  • 与函数类型类似,定义类也有两种主要方式:类声明和类表达式。这两种方式都使用class关键字加大括号
//类的声明
class Person {}

//类的表达式
const Animal = class {};
 
  • 与函数表达式类似,类表达式在它们被求值之前也不能引用。不过,与函数定义不同的是,虽然函数声明可以提升,但类定义不能。
  • 与函数声明不同的地方是,函数受函数作用域的限制,而类受块作用域的限制

类的构成

  • 包含构造函数、实例方法、获取函数、设置函数和静态类方法,但这些都不是必须的。空的类定义照样有效。默认情况下、类定义中代码都在严格模式下执行
//空定义,有效
class Foo {}

//有构造函数的类,有效
class Bar {
    constructor(){}
}

//有获取函数的类,有效
class Baz {
    get myBza(){}
}

//有静态方法的类,有效
class Qux {
    static myQuex() {}
}
 

类的构造函数

  • 使用new操作符实例化Person的操作等于使用new调用其构造函数
  1. 在内存中创建一个新的对象
  2. 这个新对象内部的[[Prototype]]指针被赋值为构造函数的prototype属性。
  3. 构造函数内部的this被赋值这个新的对象
  4. 执行构造函数内部的代码(给新对象添加属性)
  5. 如果构造函数返回非空对象,则返回该对象,否则创建新的对象。
class Animal {}

class Person {
    constructor() {
        console.log('person color')
    }
}

class Vegetable {
    constructor() {
        this.color = 'orange';
    }
}

let a = new Animal();

let p = new Person(); //person color

let v = new Vegetable();
console.log(v.color); // orange
 
  • 默认情况下,类的构造函数执行完之后会返回this对象。构造函数返回的对象会被用作实例化的对象,如果没有什么引用新创建的this对象,那么这个对象会被销毁。

回复

我来回复
  • 暂无回复内容