プライベート変数のクロージャ実装プライベート変数は共有されない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 の表現と値の選択方法についての簡単な説明
今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...
目次テーマを動的に変更する最初の方法: 動的コンポーネント2番目の方法はルーティング分離です要約する...
最近、サーバー上のアカウントが2つハッキングされ、パスワードが改ざんされました。幸い、まだ使えるアカ...
目次01 レプリカセットアーキテクチャ02 MySQL Shellの紹介とインストール03 My...
アパッチ スカイウォーキングApache SkyWalking は、マイクロサービス、クラウド ネイ...
キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...
最初の方法: デモとしてボタンをクリックしてテキストを表示または非表示にするクラスを動的に追加します...
JS の async 関数と await キーワード 関数ヘルワールド() { 「こんにちは!美しい...
この記事の例では、ミニプログラムでリストカウントダウンを実装するための具体的なコードを参考までに共有...
目次概要1. フックの呼び出し順序2. onChangesフック3. 変更検出メカニズムとDoChe...
js興味深いカウントダウンケース、参考までに、具体的な内容は次のとおりですコード: <!DO...
この記事では、角を丸くするためのjsキャンバスの具体的なコードを参考までに紹介します。具体的な内容は...
この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...
序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...
最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...