今日はJavaScriptのイベント委譲と深いコピーと浅いコピーについてお話します 1. イベントの委任まず、イベントバインディングを紹介しましょう //方法 1: onclick 経由 <button onclick="clickEvent()">クリック</button> <スクリプト> 関数 clickEvent(){ alert("クリックイベント"); } </スクリプト> //方法 2: addEventListener 経由 <button id="btn_button">クリック</button> <スクリプト> var btn = document.getElementById("btn_button"); btn.addEventListener("クリック", 関数() { アラート("クリック"); }、 間違い); </スクリプト> 違いを教えてください [関数メソッド1() { console.log("メソッド1"); } 関数メソッド2() { console.log("メソッド2"); } 関数メソッド3() { console.log("メソッド3"); } var btn = document.getElementById("btn_button"); btn.addEventListener("click", method1, false); // 3 番目のパラメータはデフォルト値で、デフォルトではバブリングです。true に設定すると、キャプチャされます。btn.addEventListener("click", method2, false); btn.addEventListener("click", method3, false); // 最終的に、method1 -> method2 -> method3 の順に実行されます。 btn.removeEventListener("click", method1, false); // イベントを削除するために使用されます btn.onclick = method1; btn.onclick = メソッド2; btn.onclick = メソッド3; //最後にmethod3のみが実行されます btn.onclick = null; // イベントを削除するために使用 イベントバブリング<ul id="コンテナ" スタイル="display: インラインブロック;"> <li id="title1">123456</li> <li id="title2">クワート</li> <li id="title3"> <ul> <li id="title3inner">title3 内のテキスト</li> </ul> </li> </ul> <スクリプト> var コンテナ = document.getElementById("コンテナ"); var title1 = document.getElementById("title1"); var title2 = document.getElementById("title2"); var title3 = document.getElementById("title3"); var title3inner = document.getElementById("title3inner"); コンテナ.onclick = 関数 (e) { アラート("コンテナ"); } title1.onclick = 関数(e) { アラート("title1"); } title2.onclick = 関数(e) { アラート("title2"); } title3.onclick = 関数 (e) { アラート("title3"); } title3inner.onclick = 関数 (e) { アラート("title3inner"); } </スクリプト> title3 のテキストをクリックすると、3 つのイベントがトリガーされ、それぞれ「title3inner」->「title3」->「container」がポップアップ表示されます。 イベントキャプチャイベント バブリングに関しては、その逆がイベント キャプチャです。つまり、「title3 内のテキスト」をクリックすると、3 つのイベントがトリガーされ、それぞれ「コンテナー」->「title3」->「title3inner」がポップアップ表示されます。 イベントの泡立ちの昇華イベント委任の使用 <ul id="コンテナ" スタイル="display: インラインブロック;"> <li id="title1">123456</li> <li id="title2">クワート</li> <li id="title3">QWE123</li> </ul> <スクリプト> var コンテナ = document.getElementById("コンテナ"); コンテナ.onclick = 関数 (e) { //コンソールログ(e); (e.target.id = "title1") の場合 { アラート(e.target.innerText); } そうでない場合 (e.target.id = "title2") { アラート(e.target.innerText); } そうでない場合 (e.target.id = "title3") { アラート(e.target.innerText); } } </スクリプト> 利点としては、クリック イベントを登録するだけで、ターゲットを使用してクリックされた特定の要素を判別できることです。 currentTarget は、イベントを登録した要素を参照します。 考える理論上、イベント委任を使用することは確かに最適化です。イベントを登録し、イベント バブリングを通じて対応する関数を実装するだけで済みます。 とにかく、私はこのようにして、各ボタンにイベントをバインドし、バブルを防止しました。実際には、個人的にはイベント委任はあまり考えていません。必要ないと思います。結局のところ、イベントはそれほど多くありません。 2. 深いコピーと浅いコピー深浅コピーの知識に関しては、短くまとめて一撃で仕留めます! a = 3 とします。 b = a とします。 a = 4; コンソールログ(a); //4 コンソールログ(b); //3 console.log(a === b); //これはディープコピーです。a と b は完全に異なる変数であり、それぞれに値が格納されます。 arr = [1, 2, 3, 4, 5]とします。 brr = arr とします。 ar[1] = 8; コンソール.log(arr[1]); //8 console.log(brr[1]); //8 なぜ? これは浅いコピーです。配列型は参照型です。arr 変数と brr 変数は参照アドレスのみを格納します。これらは一緒に配列 [1,2,3,4,5] を指します。console.log(arr === brr); //true 実際にディープコピーを実装したい場合はどうすればよいでしょうか? arr = [1, 2, 3, 4, 5]とします。 brr = JSON.parse(JSON.stringify(arr)) とします。 ar[1] = 8; console.log(brr[1]); //2、これはいわゆるディープコピーを実装する 結論面接官が言ったように、上記の知識は実際の仕事では使わないかもしれませんが、それでも知っておく必要があります!まだ知る必要があります! !まだ知る必要があります! ! ! これで、JavaScript のイベント委譲メカニズムとディープ コピーおよびシャロー コピーに関するこの記事は終了です。より関連性の高い js イベント委譲とディープ コピーおよびシャロー コピーのコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CentOS 7 で RPM を使用して mysql5.7.13 をインストールする
>>: Windows で MySQL 5.7.17 圧縮バージョンをインストールするときに遭遇する落とし穴
この記事では主に、クーポンの背景画像などでよく使われる CSS 円形ホローイングについて紹介し、皆さ...
目次1. innodb_buffer_pool_size 2. innodb_log_buffer_...
おそらく、この問題にまだ遭遇していない人もいるでしょうから、まずは適応高さとは何かを説明しましょう。...
データベース内のテーブルのフィールドとプロパティをエクスポートし、テーブルを作成してWordに保存す...
最近、MySQL 5.6 を導入しましたが、デフォルトでは MySQL はローカル サービスのみを許...
FTP と比較すると、SSH ベースの sftp サービスは、セキュリティが優れており (非プレーン...
この記事では、JavaScriptにおけるアロー関数と通常の関数の違いについて解説します。具体的な内...
目次概要オブジェクトの残り属性オブジェクトの拡張プロパティオブジェクトの浅いコピーを作成するkeyo...
この記事では、パーセンテージスコアリングプログレスバーを実現するためのjQueryの具体的なコードを...
この記事では、参考までに、Vuex の具体的なコードを共有して、簡単なショッピングカートを実装します...
目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...
この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...
CSS 表示プロパティ注: !DOCTYPE が指定されている場合、Internet Explore...
目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...
MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機...