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.img dis...
目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...
拡張版です。質問とSQL文は以下の通りです。ユーザー テーブルを作成し、id、name、gender...
注: 私はCentosを使ってdockerをインストールしていますステップ1: Dockerをインス...
日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...
<input> はユーザー情報を収集するために使用され、終了ステートメントはありません。...
1. MySQLをダウンロードする公式サイトのダウンロードページをクリックすると次のページに入ります...
序文スクロールやサイズ変更などのスクロール イベントがトリガーされると、トリガーの頻度が非常に高くな...
目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...
JS はホバー ドロップダウン メニューを実装します。これは、フロントエンドの面接で遭遇するシナリ...
目次1. 概要1. 原則2. 実装3. スレーブインスタンスを作成する4. マスタースレーブ構成要約...
1. デッドロックとは何ですか?正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要...
開発中に、非常に単純なテキストバブル効果に遭遇しました。これは、おおよそ次のようになります。 うーん...
前回、Taobaoの詳細ページを分析した後(クリックして表示)、ショッピングモールの基本テンプレート...
Excel のエクスポートは、docker 環境では常に失敗します。最も直接的な原因は、中国語フォン...