Що таке ключове слово "отримати" перед функцією в класі?


106

Що getозначає цей клас ES6? Як звернутися до цієї функції? Як я повинен його використовувати?

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

5
Це, швидше за все, просто геттер, але всередині класу замість об'єкта. Це насправді не специфічно для ES6.
user4642212

@Xufox як ти це маєш на увазі не для ES6?
Кіт Ніколас

1
@KeithNicholas: Це працювало в ES5 так само.
Бергі

@KeithNicholas Getters існують з ES5, я думаю. Єдине, що є ES6 тут - це classсинтаксис, але гетьтери - це не нове.
user4642212

Відповіді:


109

Це означає, що функція - це отримувач властивості.

Щоб використовувати його, просто використовуйте його ім'я, як і будь-яке інше властивість:

'use strict'
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

var p = new Polygon(10, 20);

alert(p.area);


2
Заняття неявно в суворому режимі btw. ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
Kit Sunde

1
@KitSunde - принаймні у своєму браузері (Chrome, Win7), без цього твердження я отримую помилки консолі замість робочого зразка. І це не є частиною "Відповіді", як і кнопка "Виконати фрагмент коду".
Аміт

4
Ви не можете просто подзвонити p. calcArea? якщо ні, то чому б ні?
ksav

9
Чи ключові слова get / set - це лише синтаксичний цукор - оскільки дзвінок на Polygon.calcArea () також буде діяти як геть?
Крейг О. Кертіс

значить, функція get getключового слова не може мати параметр?
jay1234

47

Підсумок:

getКлючове слово зв'язати властивість об'єкта до функції. Коли ця властивість шукається, тепер викликається функція getter. Після цього значення повернення функції getter визначає, яке властивість буде повернуто.

Приклад:

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName);
// When the fullname property gets looked up
// the getter function gets executed and its
// returned value will be the value of fullname


2
Великі пальці для практичного прикладу!
Нікет Патхак

8
Я думаю, що можу ще більше спростити це. 'Get' дозволяє обробляти метод класу так, ніби це була проста властивість в об'єкті. Якщо ви вимкнете "отримати", ви все одно можете отримати доступ до значення, зателефонувавши .area () замість просто .area
dwilbank

21

Це getter, такий же, як Об'єкти та Класи в OO JavaScript. З Документів MDN для get:

getСинтаксис пов'язує властивість об'єкта в функцію , яка буде викликатися , коли це властивість шукається.


0

або більш простий спосіб просто викликати функцію, не потребуючи користувача "()", просто ввівши ім'я функції

дві вищезгадані функції є рівною увагою до person.fullName () та person.fullName

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName());

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName);

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.