プライベート変数のクロージャ実装プライベート変数は共有されない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 の表現と値の選択方法についての簡単な説明
序文私が使用しているパソコンはMacで、OSはmacOS Mojaveです。コンピュータに仮想マシン...
MySQL Workbench - モデリングおよび設計ツール1. モデルは、最も効果的で高性能なデ...
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...
目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...
さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...
1. MySQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...
序文ES6 で初めて導入された「構造化代入構文」を使用すると、配列やオブジェクトの値を異なる変数に挿...
目次1. トリガーの紹介1. トリガーとは何ですか? 2. トリガーの特徴2. トリガーを作成する1...
場合によっては、次のような機能を実装したいことがあります。リンクをクリックします。リンクがブラウザで...
xshellを使用してLinuxに接続する利点Windows環境でLinuxを直接操作できるインター...
目次序文1. 全員にインストールパッケージを用意する2. Navicatをインストールし、Navic...
この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...
構文の構成: 1 注釈情報2 コマンド --- パラメータ [通常は大文字 | 実際には大文字と小文...
チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...