今日は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 圧縮バージョンをインストールするときに遭遇する落とし穴
公式ウェブサイトアドレス: https://www.mysql.com/インストールの提案: インス...
データ型と操作データテーブル1.1 MySQL 型: 整数 1.2 MySQL データ型: 浮動小数...
文字列連結ではなく path.join() メソッドを使用する必要があるのはなぜか疑問に思うかもしれ...
トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...
Dockerネットワークを見るdocker ネットワーク ls [root@master ~]# d...
WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...
現在、CSS プリプロセッサは Web 開発の標準となっています。 プリプロセッサの主な利点の 1 ...
質問docker で gdb を実行すると、ブレークポイントに到達しますが、ブレークポイントに入るこ...
この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...
単一のDOMノードでカルーセルを実装するbackgroundImage を使用すると、複数の画像を追...
HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...
一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...
複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...
目次1. 最も適切なフィールド属性を選択する2. フィールドをNOT NULLに設定してみる3. サ...
1. なぜパッケージングを行うのですか?全体的なコード呼び出し、リクエストの公開処理、パーソナライズ...