クラスの関数の前の「get」キーワードとは何ですか?


105

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固有ではないというのはどういう意味ですか?
Keith Nicholas

1
@KeithNicholas:ES5でも同じように機能すること。
Bergi

@KeithNicholasゲッターはES5から存在していると思います。ここでES6となるのはclass構文だけですが、ゲッターは新しいものではありません。
user4642212

回答:


108

これは、関数がプロパティのゲッターであることを意味します。

それを使用するには、他のプロパティと同じように名前を使用します。

'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
クラスは、暗黙的に厳密モードです。ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
キットサンデ

1
@KitSunde-少なくとも私のブラウザー(Chrome、Win7)では、そのステートメントがないと、サンプルの代わりにコンソールエラーが発生します。また、「コードスニペットの実行」ボタンとは異なり、これは「The Answer」の一部ではありません。
2015

4
あなたはただ電話することはできませんp. calcAreaか?そうでない場合、なぜでしょうか。
ksav 2016年

9
get / setキーワードは単なる構文上の砂糖ですか?Polygon.calcArea()への呼び出しもゲッターとして機能しますか?
クレイグO.カーティス

関数get getキーワードにパラメータを含めることはできませんか?
jay1234

46

概要:

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
実用的な例に賛成です!
Niket Pathak 2018

8
もっと簡単にできると思います。'get'を使用すると、クラスメソッドをオブジェクトの単純なプロパティであるかのように扱うことができます。「get」を省略しても、.area()だけでなく.area()を呼び出して値にアクセスできます
dwilbank

21

これはゲッターであり、OO JavaScriptのオブジェクトとクラスと同じです。MDNドキュメントからget

get構文は、そのプロパティが検索されるときに呼び出される関数にオブジェクトのプロパティをバインドします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.