ES6类—如何定义与类关联的方法

JavaScript 静态方法介绍

根据定义,静态方法绑定到一个类,而不是该类的实例。因此,静态方法对于定义帮助程序或实用程序方法很有用。

要在 ES6 之前定义静态方法,直接将其添加到类的构造函数中。例如,假设我们有一个 Person 类型,如下所示:

function Person(name) {

    this.name = name;

}




Person.prototype.getName = function () {

    return this.name;

};

下面将一个名为 createAnonymous() 的静态方法添加到 Person 类型:

Person.createAnonymous = function (gender) {
    let name = gender == "male" ? "John Doe" : "Jane Doe";
    return new Person(name);
};

createAnonymous() 方法被认为是静态方法,因为它的属性值不依赖于 Person 类型的任何实例。

要调用 createAnonymous() 方法,请使用 Person 类型而不是其实例:

var anonymous = Person.createAnonymous();


ES6 中的 JavaScript 静态方法

在 ES6 中,我们使用 static 关键字定义静态方法。以下示例为 Person 类定义了一个名为 createAnonymous() 的静态方法:


class Person {
  constructor(name) {
    this.name = name;
  }
  getName() {
    return this.name;
  }
  static createAnonymous(gender) {
    let name = gender == "male" ? "John Doe" : "Jane Doe";
    return new Person(name);
  }
}

要调用静态方法,请使用以下语法:

let anonymous = Person.createAnonymous("male");

如果你试图从类的实例调用静态方法,你会得到一个错误。例如:

let person = new Person('James Doe');
let anonymous = person.createAnonymous("male");

错误:

TypeError: person.createAnonymous is not a function


从类构造函数或实例方法调用静态方法

要从类构造函数或实例方法调用静态方法,请使用类名,后跟 . 和静态方法:


className.staticMethodName();

或者,可以使用以下语法:

this.constructor.staticMethodName();


总结

  • JavaScript 静态方法在类的实例之间共享。因此,它们与类绑定。
  • 通过类名调用静态方法,而不是该类的实例。
  • 使用 className.staticMethodName() 或 this.constructor.staticMethodName() 调用类构造函数或实例方法中的静态方法。
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章