[解決済み] ES6クラスで "public static field "を作成するには?
質問
Javascriptのクラスを作っているのですが、Javaのようなpublic staticフィールドを持ちたいと思っています。これは関連するコードです。
export default class Agent {
CIRCLE: 1,
SQUARE: 2,
...
このようなエラーが出ます。
line 2, col 11, Class properties must be methods. Expected '(' but instead saw ':'.
ES6モジュールはこれを許さないようです。希望する動作を得るための方法、あるいはゲッターを書かなければならないのでしょうか?
どのように解決するのですか?
アクセッサとstaticキーワードを使用して、public static fieldを作成します。
class Agent {
static get CIRCLE() {
return 1;
}
static get SQUARE() {
return 2;
}
}
Agent.CIRCLE; // 1
仕様書を見る 14.5 - クラス定義 - 怪しく関連するものを見ることになるでしょう :)
ClassElement[Yield] :
MethodDefinition[?Yield](メソッド定義)。
静的 MethodDefinition[?Yield](メソッド定義) ;
ということで、そこから先は 14.5.14 - ランタイム・セマンティクス。ClassDefinitionEvaluation - それが本当にそのように見えることを行うかどうかを再確認します。具体的には、ステップ20です。
- 各ClassElement mについて、メソッドから順に
- もし mのIsStaticがfalseの場合 であれば
- mに対してPropertyDefinitionEvaluationを引数protoとfalseで実行した結果をstatusとする。
- Elseとする。
- mに対して、引数FとfalseでPropertyDefinitionEvaluationを実行した結果をstatusとする。
- ステータスが唐突に終了する場合
- 実行中の実行コンテキストのLexicalEnvironmentをlexに設定する。
- ステータスを返す。
IsStaticは、先に定義した 14.5.9
ClassElement : static MethodDefinition(静的メソッド定義
trueを返します。
そこで
PropertyMethodDefinition
は "F"(コンストラクタ、関数オブジェクト)を引数として呼び出され、その引数には
はそのオブジェクトにアクセッサメソッドを作成します。
.
これは はすでに動作しています。 は少なくとも IETP (tech preview) で、また 6to5 と Traceur コンパイラで動作しています。
関連
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] 指定された要素にクラスを追加するには?
-
[解決済み] JavaScriptでテキスト入力フィールドの値を取得するにはどうすればよいですか?
-
[解決済み] Jestを使用してES6モジュールのインポートをモックするにはどうすればよいですか?
-
[解決済み] ES6クラスで静的定数を宣言する?
-
[解決済み】ES6クラス変数の代替品
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptの静的変数
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?