[解決済み] JavaScriptの静的変数
2022-03-18 12:24:41
質問
Javascriptで静的変数を作成するにはどうすればよいですか?
どのように解決するのですか?
クラスベースの静的型付けオブジェクト指向言語から来た場合 (Java、C++、C#など) インスタンスではなく、"type"に関連する変数やメソッドを作成しようとしているのだと思います。
コンストラクタ関数を使った古典的なアプローチの例は、基本的なOO JavaScriptの概念を理解するのに役立つかもしれません。
function MyClass () { // constructor function
var privateVariable = "foo"; // Private variable
this.publicVariable = "bar"; // Public variable
this.privilegedMethod = function () { // Public Method
alert(privateVariable);
};
}
// Instance method will be available to all instances but only load once in memory
MyClass.prototype.publicMethod = function () {
alert(this.publicVariable);
};
// Static variable shared by all instances
MyClass.staticProperty = "baz";
var myInstance = new MyClass();
staticProperty
は MyClass オブジェクト (これは関数です) で定義され、その生成されたインスタンスとは何の関係もありませんが、JavaScript は関数を次のように扱います。
第一級オブジェクト
そのため、オブジェクトである関数にプロパティを割り当てることができます。
UPDATEしてください。
ES6 では
クラス宣言
を通して
class
というキーワードがあります。これは、既存のプロトタイプベースの継承を超えるシンタックスシュガーです。
は
static
キーワード
を使用すると、クラス内に静的なプロパティやメソッドを簡単に定義することができます。
上記の例をES6クラスで実装して見ましょう。
class MyClass {
// class constructor, equivalent to
// the function body of a constructor
constructor() {
const privateVariable = 'private value'; // Private variable at the constructor scope
this.publicVariable = 'public value'; // Public property
this.privilegedMethod = function() {
// Public Method with access to the constructor scope variables
console.log(privateVariable);
};
}
// Prototype methods:
publicMethod() {
console.log(this.publicVariable);
}
// Static properties shared by all instances
static staticProperty = 'static value';
static staticMethod() {
console.log(this.staticProperty);
}
}
// We can add properties to the class prototype
MyClass.prototype.additionalMethod = function() {
console.log(this.publicVariable);
};
var myInstance = new MyClass();
myInstance.publicMethod(); // "public value"
myInstance.additionalMethod(); // "public value"
myInstance.privilegedMethod(); // "private value"
MyClass.staticMethod(); // "static value"
関連
-
fetch ネットワークリクエストラッパーの説明例
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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の関数この指摘の問題を説明
-
要素ツリー制御によるvueTreeテーブル
-
Vue+ElementUIによる大規模なフォームの処理例
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueのクラススタイルの使い方の詳細
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?