JS резюме класса

JavaScript

class — это новая функция ES6, которую можно использовать для определения класса, по сути, class — это просто синтаксический сахар, это еще один способ написания конструктора. (Что такое синтаксический сахар? Это элегантное решение на уровне синтаксиса, позволяющее избежать ошибок кодирования и повысить эффективность кодирования. Короче говоря, портативный метод записи.)

class Person {

}
typeof Person // "function"
Person.prototype.constructor === Person // true

🚗 использовать

Использование такое же, как и при использовании конструктора, создание экземпляра объекта с помощью new

class Person {

}
let jon = new Person()

🚌 конструктор

Каждый класс должен иметь конструктор, если нет явного объявления, js движок автоматически добавит в него пустой конструктор:

class Person {

}
// 等同于
class Person {
  constructor () {

  }
}

🏎 свойства и методы

Свойства и методы, определенные в конструкторе, то есть определенные в this, принадлежат свойствам и методам экземпляра, в противном случае они принадлежат свойствам и методам прототипа.

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

  say () {
    console.log('hello')
  }
}

let jon = new Person()

jon.hasOwnProperty('name') // true
jon.hasOwnProperty('say') // false

🚓 Выражения свойств

let methodName = 'say'
class Person {
  constructor (name) {
    this.name = name
  }

  [methodName] () {
    console.log('hello')
  }
}

🚚 Статические методы

Метод, который можно вызвать непосредственно через класс без передачи объекта экземпляра, где this указывает на сам класс.

class Person {
  static doSay () {
    this.say()
  }
  static say () {
    console.log('hello')
  }
}
Person.doSay() // hello

Статические методы могут наследоваться подклассами

// ...
class Sub extends Person {

}
Sub.doSay() // hello

можно получить через суперобъект

// ...
class Sub extends Person {
  static nice () {
    return super.doSay()
  }
}
Sub.nice() // hello

🚜 Строгий режим

Нет необходимости использовать use strict, потому что пока код написан внутри классов и модулей, можно использовать только строгий режим.

🏍 повысить

класс не имеет подъема переменных.

new Person() // Uncaught ReferenceError: Person is not defined
class Person {

}

🚄 свойство имени

Атрибут name возвращает имя класса, имя сразу после класса.

class Person {

}
Person.name // Person

🚈 это

По умолчанию экземпляр класса.

🚂 Геттер и сеттер

class Person {
  get name () {
    return 'getter'
  }
  set name(val) {
    console.log('setter' + val)
  }
}

let jon = new Person()
jon.name = 'jon' // setter jon
jon.name // getter

🛥 выражение класса

При необходимости определите внутреннее имя класса для класса, если нет, то его можно не указывать:

// 需要在类内部使用类名
const Person = class Obj {
  getClassName () {
    return Obj.name
  }
}
// 不需要
const Person = class {}

Класс, который выполняется немедленно:

let jon = new class {
  constructor(name) {
    this.name = name
  }
  sayName() {
    console.log(this.name)
  }
}('jon')

jon.sayName() //jon

🚀 Ссылка