プライベート変数のクロージャ実装プライベート変数は共有されないnew キーワードにより、 person コンストラクター内の this は Tom を指し、新しいスペースが開かれ、すべてのステップが再度実行されます。 クラス Person{ コンストラクタ(名前){ _num = 100 とします。 this.name = 名前; this.getNum = 関数(){ _num を返します。 } this.addNum = 関数(){ +___numを返す } } } const トム = 新しい Person('トム') const jack = 新しい Person('jack') tom.addNum() コンソールログ(tom.getNum()) //101 コンソールログ(jack.getNum()) //100 プライベート変数は共有できる各関数に新しいプライベート変数が生成されて、一部の変数を共有できないという問題が発生するのを回避するには、このプライベート変数をクラス コンストラクターの外側に配置し、クロージャを通じてこの変数を返し続けます。 const Person = (関数() { _num = 100 とします。 _Personクラスを返す{ コンストラクタ(名前) { this.name = 名前; } 追加番号() { +___numを返す } 取得番号() { _numを返す } } })() const トム = 新しい Person('トム') const jack = 新しい Person('jack') tom.addNum() コンソールログ(tom.getNum()) //101 コンソールログ(jack.getNum()) //101 この場合、2 つの方法を混在させると、共有可能なプライベート変数と共有不可能なプライベート変数の 2 種類が存在することになります。 デメリット: インスタンス化中に多くのコピーが追加され、より多くのメモリが消費されます。 シンボルはクラスのプライベート変数を実装しますシンボルの紹介:一意の値を作成します。すべてのシンボルは互いに同じではありません。シンボルを作成するときに、説明シンボル (「desc」) を追加できます。現在、オブジェクトのキーもシンボルをサポートしています。 const name = シンボル('name') const person = { // クラス名 [name]: 'www', 言う(){ console.log(`name は ${this[name]} です `) } } 人.言う() console.log(名前) オブジェクトに Symbol を使用して作成されたキーは、Json によって反復処理およびシリアル化できないため、その主な機能はオブジェクトに一意の値を追加することです。 実装クラスのシンボルプライベート変数クロージャを使用してシンボルへの参照を作成し、クラスのメソッド領域でこの参照を取得できるようにすることをお勧めします。これにより、すべてのメソッドがコンストラクターに記述され、新しいインスタンスが作成されるたびにメソッドを割り当てるためのスペースが割り当てられ、メモリが無駄になる状況を回避できます。 const Person = (関数() { let _num = Symbol('_num: プライベート変数'); _Personクラスを返す{ コンストラクタ(名前) { this.name = 名前; this[_num] = 100 } 追加番号() { ++this[_num]を返す } 取得番号() { これを返す[_num] } } })() const トム = 新しい Person('トム') const jack = 新しい Person('jack') コンソールログ(tom.addNum()) //101 コンソール.log(jack.getNum()) //100 ウィークマップによるプライベート変数の作成MDNについて 成し遂げる:const 親 = (関数 () { const プライベート = 新しい WeakMap(); 親クラスを返す { コンストラクタ() { 定数私 = { データ: 「ここにプライベートデータが入ります」 }; privates.set(this, me); } getP() { const me = privates.get(this); 返して } } })() p = 新しい親() とする コンソールログ(p) コンソールログ(p.getP()) 要約するまとめると、weakmap メソッドはメモリを節約でき、リサイクルが容易で、より多くのブラウザと互換性があるため、最も推奨される実装方法でもあります。 これで、ES6 実装クラスでプライベート変数を記述するいくつかの方法についての記事は終了です。ES6 クラスのプライベート変数の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 練習と面接のための Linux シェル スクリプトのヒント 9 つを共有する
>>: innodb_autoinc_lock_mode の表現と値の選択方法についての簡単な説明
概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...
MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...
VMware で Linux 仮想マシンを作成し、VMware と仮想マシンのネットワークを設定する...
次のスクリプトは、MySQLデータベース全体のスケジュールされたバックアップに使用されます。 mys...
私は通常、Tomcatや他のアプリケーションのリバースプロキシとしてnginxを使用しています。実際...
目次トランザクション分離レベル同時トランザクション実行中に発生した問題SQL標準の4つの分離レベルM...
通常は <ul><li> タグを使用しますが、dd タグと dt タグも便利...
2つの状況がある1. 開始時間と終了時間が同じボックス内にあります(今月のみ限定) 2. 開始時間と...
最終結果はこんな感じです、かわいいでしょう… PS: HTML と CSS の知識があればベストです...
目次背景質問1エラー 2エラー 3エラー4要約する背景テスト環境では、docker プラグインを統合...
1. 需要3 つのテーブルがあります。一定期間にわたるさまざまな抗生物質感受性の結果、つまり rep...
.imgbox{ 幅: 1200ピクセル; 高さ: 612px; 右マージン: 自動; 左マージン...
MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...
はじめに: すべてのデータを 1 つのテーブルに保存することのデメリット表の構成構造は複雑で不明瞭で...
Nginx は、一般的に 7 層の負荷分散に使用できます。この記事では、負荷分散に関する基本的な知識...