如何使用JavaScript类

2015年,ECMAScript 6(ES6)标准引入了类。了解所有关于他们的信息

2015年,ECMAScript 6(ES6)标准引入了类。

JavaScript有一种非常不常见的实现继承的方法:原型继承。原型继承在我看来很棒,但是与大多数其他流行的编程语言基于类的继承实现不同。

来自Java或Python或其他语言的人们很难理解原型继承的复杂性,因此ECMAScript委员会决定在原型继承的基础上撒上语法糖,以使其类似于基于类的继承在其他流行实现中的工作方式。

这很重要:底层的JavaScript仍然相同,并且您可以以通常的方式访问对象原型。

类定义

这是一个类的外观。

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

hello() { return 'Hello, I am ’ + this.name + ‘.’ } }

一个类有一个标识符,我们可以使用它来创建新对象new ClassIdentifier()

初始化对象后,constructor调用方法,并传递任何参数。

一个类还具有所需的许多方法。在这种情况下hello是一个方法,可以在派生自此类的所有对象上调用:

const flavio = new Person('Flavio')
flavio.hello()

类继承

一个类可以扩展另一个类,并且使用该类初始化的对象将继承这两个类的所有方法。

如果继承的类具有与层次结构中较高级别的类之一名称相同的方法,则最接近的方法优先:

class Programmer extends Person {
  hello() {
    return super.hello() + ' I am a programmer.'
  }
}

const flavio = new Programmer(‘Flavio’) flavio.hello()

(以上程序打印“您好,我是弗拉维奥。我是电脑程序编制员。”)

类没有显式的类变量声明,但是必须在构造函数中初始化任何变量。

在一个类中,您可以引用父类调用super()

静态方法

通常,方法是在实例上定义的,而不是在类上定义的。

静态方法改为在类上执行:

class Person {
  static genericHello() {
    return 'Hello'
  }
}

Person.genericHello() //Hello

私人方法

JavaScript没有内置的方法来定义私有或受保护的方法。

有解决方法,但在此不再赘述。

吸气剂和二传手

您可以添加以开头的方法get或者set创建一个getter和setter,这两个是根据您所执行的代码的两个不同部分:访问变量或修改其值。

class Person {
  constructor(name) {
    this._name = name
  }

set name(value) { this._name = value }

get name() { return this._name } }

如果只有getter,则无法设置该属性,并且这样做的任何尝试(在构造函数之外,当您使用此类初始化新对象时都会设置值)将被忽略:

class Person {
  constructor(name) {
    this._name = name
  }

get name() { return this._name } }

如果只有二传手,则可以更改值,但不能从外部访问它:

class Person {
  constructor(name) {
    this._name = name
  }

set name(value) { this._name = value } }

当您要在更改属性值时执行一些代码,或者要创建“计算的”属性时,getter和setter很有用。您可以使用getter更改返回的值。

您还可以运行一些代码,例如在更改值时登录到控制台或文件。

免费下载我的JavaScript初学者手册


更多js教程: