ES6 类 中, static 关键字允许您在类本身上定义一个函数,而不是类的实例。

class MyClass {
  static myFunction() {
    return 42;
  }
}

typeof MyClass.myFunction; // function
MyClass.myFunction(); // 42

// `myFunction()` is a function on `MyClass`, **not**
// instances of `MyClass`
const obj = new MyClass();
obj.myFunction; // undefined

在 JavaScript 中,类是和其他对象一样的对象。 因此,静态允许您在类定义中定义类上的函数。 等效地,您可以将一个函数分配给 MyClass

class MyClass {}
MyClass.myFunction = function() {
  return 42;
};

MyClass.myFunction(); // 42

this

在静态函数中, this 指类。

class MyClass {
  static myFunction() {
    return this;
  }
}

MyClass.myFunction() === MyClass; // true

静态属性

静态属性,也称为类字段 ,目前是 TC39 的第 3 阶段提案 ,这意味着它们在技术上还不是 JavaScript 语言的一部分。 但是,它们在较新版本的 Google Chrome 中受支持。

class MyClass {
  static answer = 42;
}

MyClass.answer; // 42

使用具有非原始值的静态属性时要小心。 如果您将 继承与非原始静态属性一起 ,则从您的类继承的每个类都将具有该对象的相同副本。

class MyClass {
  static val = new Object();
}

class MyChildClass extends MyClass {}

MyChildClass.val === MyClass.val; // true
© 版权声明
评论 抢沙发

请登录后发表评论