概要主に Object.defineProperty を使用して、vue と同様のデータ バインディングを実装します。 最初のステップ定数データ = { 名前: "トム", 年齢: 14 } Object.defineProperty(データ、"名前"、{ 得る(){ 「名前が読み取られました」を返します }, set(val){ console.log('割り当てられました',val) } }) //効果を確認するには、このコードをブラウザコンソールに入力します console.log(data.name) 出力 data.name は tom ではありませんが、name が読み取られます。これは、defineProperty がデータの name フィールドを監視および乗っ取り、name フィールドが返すはずの値を変更するためです。 ステップ2const _data = { ...データ } for(let i in data){ オブジェクト.defineProperty(データ, i, { 得る(){ _data[i]+"jsによって変更されました"を返します }, set(val){ _data[i] = 値; } }) } なぜ別の _data が必要なのでしょうか?回答: データ フィールドが監視され、フィールドの return 属性が変更されます。その結果、データ内の監視対象フィールドが取得されるたびに、ブラウザーは get によって返された値を呼び出します。get で return data[i] を直接返すと、ブラウザーは get メソッドを継続的に呼び出し、無限ループに入ります。 データにもう少しデータを追加する定数データ = { 名前: "トム", 年齢: 14歳 友人: "name1": "張三", "name2": "李思", "name3": "王武", "name4": "趙劉" }, } 初期値の書式設定const createNewWatch = (val, パス, 親キー, イベント) => { //値がオブジェクト型でない場合は、値を直接返します。if(typeof val != 'object') return val; //逆に、オブジェクト型の場合は、WatchObject を呼び出して子要素を走査して監視します //WatchObject は次のコードで作成されます return WatchObject(val,path.concat(parentKey), event) } 広州ブランドデザイン会社 https://www.houdianzi.com オブジェクトのフォーマットと値の監視const WatchObject = (データ、パス、イベント) => { 関数WatchObject(){ for(var key in data){ // 以前に作成した関数を呼び出してvalをフォーマットします data[キー] = createNewWatch(data[キー], パス, キー, イベント) //データキーのリスナーを作成します。defineProperty(this, key, data[key], path.concat(key), event) } } 新しいWatchObject()を返す } 最後にコードを実行すると、簡単なデータ監視が完了します。 定数 b = WatchObject(データ,[],{ set(パス,値){ console.log(パス,値) } }) 上記は、JS を使用して簡単なデータ監視を実装する方法の詳細です。JS データ監視の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: Windows Server 2016 に Oracle をインストールする方法
必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...
この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...
以前、MySQL データベースのデュアルマシン ホット スタンバイの設定方法を紹介しました。ご興味の...
この記事では、CSS を使用して半透明の背景と不透明なテキストの効果を実現する方法の例を紹介します。...
ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...
1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...
序文エージェントの役割は何ですか? - 複数のドメイン名が同じサーバーに解決される- 1つのサーバー...
1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...
目次1. 読みやすいコード1. 統一コード形式2. マジックナンバーを削除する3. 単一機能原則2....
オリンピック期間中にIE8ベータ2がリリースされ、英語版のリリースに合わせて中国語版も第一波でリリー...
今日皆さんにお伝えしたいトピックは、「皆さんがよく話題にするテーブル スペースとは一体何でしょうか。...
実行後、一部の Docker コンテナが終了することがあります。原因を調べるには、Docker コン...
1: Dockerプライベートウェアハウスのインストール1. イメージリポジトリからイメージをダウン...
この記事では、例を使用して、MySQL の結合クエリ、結合クエリ、サブクエリの原理と使用方法を説明し...