メインコンテンツまでスキップ

「ES2022」タグの記事が1件件あります

全てのタグを見る

公開および非公開のクラスフィールド

· 約5分
Mathias Bynens ([@mathias](https://twitter.com/mathias))

いくつかの提案が既存のJavaScriptクラス構文を新機能で拡張しています。この記事では、V8 v7.2およびChrome 72で導入された新しい公開クラスフィールド構文と、近日公開予定の非公開クラスフィールド構文について説明します。

以下は、IncreasingCounterという名前のクラスのインスタンスを作成するコード例です:

const counter = new IncreasingCounter();
counter.value;
// ログに'現在の値を取得中!'と出力
// → 0
counter.increment();
counter.value;
// ログに'現在の値を取得中!'と出力
// → 1

注意: value にアクセスすると、結果を返す前にコード(メッセージをログに出力する)が実行されます。さて、このクラスをJavaScriptでどのように実装しますか?🤔

ES2015のクラス構文

以下は、ES2015のクラス構文を使用してIncreasingCounterを実装する方法です:

class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('現在の値を取得中!');
return this._count;
}
increment() {
this._count++;
}
}

このクラスでは、valueゲッターとincrementメソッドをプロトタイプに追加しています。さらに興味深いのは、_count というインスタンスプロパティを作成し、そのデフォルト値を0に設定するコンストラクタが含まれていることです。現在は、_count がクラスの利用者によって直接使用されないようにするために、アンダースコアのプレフィックスを使用することが多いですが、これは単なる慣例にすぎず、言語によって特に保護されているわけではありません。