1. proxy と Object.defineProperty の利点プロキシの利点:
Object.definePropertyの利点: 互換性良好: IE9 に対応していますが、Proxy にはブラウザ互換性の問題があり、ポリフィルで解消できないため、Vue の作者は、Proxy で書き直すには次のメジャーバージョン (3.0) まで待つ必要があると述べています。 2. プロキシ監視オブジェクトのシンプルな実装1. プロキシオブジェクトのシンプルな実装```javascript let data = {}; // 空のオブジェクトを定義します。let proxy = new Proxy(data, {}); // Proxy を作成し、データをターゲット オブジェクトとして使用します。// Proxy プロキシ オブジェクトの名前属性を変更します。proxy.name = 'shelley'; console.log(プロキシ); コンソール.log(データ) // { 名前: 'シェリー' } // { 名前: 'シェリー' } 「」 2. 補足知識の反映
ターゲット オブジェクトに割り当てるには、
3. プロキシ方式handler.set() メソッド属性は、操作のキャッチャーを設定します。 ```javascript データ = { 名前: 'シェリー', 年齢: '27' }; p = new Proxy(data, { set(ターゲット、プロパティ、値) { // target = ターゲット オブジェクト // prop = 設定されたプロパティ // value = 変更された値 console.log(target, prop, value); // { name: 'shelley', age: '27' } age 18 Reflect.set(...引数) を返します。 } }) ページ年齢 = 18; console.log(data); // { 名前: 'shelley'、年齢: 18 } 「」 - handler.get() 属性読み取り操作のキャプチャ。 ```javascript データ = { 名前: 'シェリー', 年齢: 22 }; p = new Proxy(data, { get(ターゲット、プロパティ){ console.log(target, prop); //{ name: 'shelley', age: 22 } 年齢 Reflect.get(...引数) を返します。 } }) console.log(ページ番号);//22 「」 Object.defineProperty 監視オブジェクトのシンプルな実装 ```javascript var o = {}; // 新しいオブジェクトを作成します var bValue = 39; // アクセサー記述子プロパティのインスタンスをオブジェクトに追加します Object.defineProperty(o, 'bValue', { // このコードは o のプロパティを設定せず、アクセスされたときにのみ get() を実行します { bValue を返します。 }, set(新しい値) { console.log('set==>', 新しい値); bValue = 新しい値; } }); コンソールログ(o) // {} // アクセサプロキシの bValue プロパティの get メソッドに入り、戻り、o オブジェクトの bValue の値を 38 に設定します。 console.log(o.bValue); // 38 // アクセサー プロキシの bValue プロパティの set メソッドに入り、bValue の新しい値を設定します。 // もう一度 get を入力して戻り、o オブジェクトの bValue の値を 40 に設定します。 o.b値 = 40; コンソール.log(o.bValue) // 40 「」 まとめ:
3. 手書きの vue3.0 双方向バインディング - es6 プロキシ1. プロキシとは何か
2. vue.jsで双方向バインディングを使用する```javascript <div id="アプリ"> <h2>{{メッセージ}}</h2> <input type="text" v-model="msg"/> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <スクリプト> vm = new Vue({ el: '#app', データ: { メッセージ: 'シェリー' }, }) </スクリプト> 「」 プロキシと Object.definePropertyVue 2.0 での双方向バインディング、双方向バインディングに Object.defineProperty() を使用する 欠点:
- Object.definePorperty() はすべてのオブジェクトのすべてのプロパティを再帰的に走査するため、データ階層が深い場合はパフォーマンスに影響します。 - Object.definePorperty() はオブジェクトに対してのみ使用でき、配列に対しては使用できません。 - Object.definePorperty() は定義中のプロパティのみを監視でき、新しく追加されたプロパティは監視できません。 - Object.definePorperty() は配列では使用できないため、vue2.0 では配列メソッドのプロトタイプを書き換えて配列データを監視することを選択しますが、それでも配列のインデックスと長さの変更を監視することはできません。 Vue 3.0 での双方向バインディング、双方向バインディングに Proxy と Reflect を使用する アドバンテージ:
欠点:
解決:
プロキシは1つのレイヤーしかプロキシできず、深く監視することはできない
これで、Vue3 データ双方向バインディングのプロキシ実装の原理に関するこの記事は終了です。Vue3 データ双方向バインディングのプロキシ実装に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Ubuntu環境にAnaconda3をインストールするための完全な手順
>>: ブラウザ(IEシリーズ)を判別するための条件付きコメント
目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...
関連記事: CentOS7でyumを使用してDockerをインストールするDockerを使ってWin...
または、インストールプロセスを自分で書き留めてください。私のサーバーシステムはAliyun Linu...
まずは違いについて話しましょう最後に、書き換えられたルールは、次の場所と一致させるために書き換えられ...
目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...
Linux の ps コマンドは Process Status の略です。 ps コマンドは、システ...
セルでは、暗い境界線の色を個別に定義できます。基本的な構文<TD ボーダーコロダーク=colo...
概要: Oracle scottユーザーには4つのテーブルがあり、実験やデータ検証に便利です。現在は...
ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...
今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...
MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...
目次仕様a. ページファイルはVueの単一ファイルコンポーネント仕様に準拠しています。 b. コンポ...
メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...
1. スクリプトを動的に読み込むウェブサイトの需要が高まるにつれて、スクリプトの需要も徐々に増加しま...
以前、https://www.jb51.net/article/205922.htm で、Docke...