プライベート変数のクロージャ実装プライベート変数は共有されない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 の表現と値の選択方法についての簡単な説明
ハイパーリンクを使用すると、ページからページへ、またはサイトからサイトへ瞬時に移動できます。このよう...
a.htmとb.htmの2つのファイルがあります。同じディレクトリ内のa.htmの内容は次のとおりで...
Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...
この記事は主に、nginx に基づいてブラウザネゴシエーションキャッシュを設定する詳細なプロセスを紹...
MySQL パフォーマンスの最適化MySQL パフォーマンスの最適化とは、リソースを合理的に配置し、...
序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...
1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...
目次1. はじめに2. 原則III. 実践3.1 インデックスプッシュダウンを使用しない3.2 イン...
この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...
MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...
これは実際には IE の公式ドキュメントではありません。他の人が実践を通じて開発した IE6 のデフ...
目次ステップ 1: root ユーザーとしてログインします。ステップ 2: 新しいデータ テーブルを...
MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...
擬似要素と擬似クラスところで、まずは疑似クラスセレクターと疑似要素セレクターについておさらいしておき...
問題の説明:エラーメッセージ:原因: com.mysql.jdbc.PacketTooBigExce...