JS の概念に関する質問の概要と回答
今回はJSの概念質問の概要とQ&Aをお届けします。JSの概念質問を使用する際の注意事項は何ですか?実際の事例を見てみましょう。
Q: JavaScript における継承とプロトタイプチェーンについて説明し、例を挙げてください。
JavaScript はプロトタイプベースのオブジェクト指向言語であり、従来のクラスベースの継承システムを持っていません。
JS では、各オブジェクトは内部的にプロトタイプと呼ばれるオブジェクトを参照し、このプロトタイプ オブジェクト自体も独自のプロトタイプ オブジェクトを参照します。これによりプロトタイプ参照チェーンが形成され、その終端はプロトタイプとして null を持つオブジェクトになります。 JS は、プロトタイプ チェーンを介して継承を実装します。オブジェクトがそれ自体に属さないプロパティを参照する場合、参照されるプロパティが見つかるまで (またはチェーンの最後で直接見つかるまで、つまりプロパティが見つかるまで) プロトタイプ チェーンが走査されます。定義ではありません)。
簡単な例:
function Animal() { this.eatsVeggies = true; this.eatsMeat = false; }function Herbivore() {} Herbivore.prototype = new Animal();function Carnivore() { this.eatsMeat = true; } Carnivore.prototype = new Animal();var rabbit = new Herbivore();var bear = new Carnivore();console.log(rabbit.eatsMeat); // logs "false"console.log(bear.eatsMeat); // logs "true"
Q: 次のコード スニペットでは、アラートは何を表示しますか?あなたの答えを説明してください。
var foo = new Object();var bar = new Object();var map = new Object(); map[foo] = "foo"; map[bar] = "bar"; alert(map[foo]); // what will this display??
ここでアラート バーがポップアップします。JS オブジェクトは本質的にキーと値のペアのハッシュ テーブルであり、キーは常に 文字列 です。実際、文字列以外のオブジェクトがキーとして使用される場合、JS はそれを暗黙的に文字列に変換し、その値をキーとして使用します。
そのため、上記のコードのマップ オブジェクトが foo オブジェクトをキーとして使用すると、自動的に foo オブジェクトの toString() メソッドが呼び出され、そのデフォルトの実装がここで呼び出されます。文字列「[object Object]」が取得されます。次に、上記のコードを見てください。説明は次のとおりです:
var foo = new Object(); var bar = new Object(); var map = new Object(); map[foo] = "foo"; // --> map["[Object object]"] = "foo"; map[bar] = "bar"; // --> map["[Object object]"] = "bar"; // NOTE: second mapping REPLACES first mapping! alert(map[foo]); // --> alert(map["[Object object]"]); // and since map["[Object object]"] = "bar", // this will alert "bar", not "foo"!! // SURPRISE! ;-)
Q: JavaScript のクロージャについて説明してください。閉鎖とは何ですか?それらにはどのようなユニークな特性があるのでしょうか?どのように、そしてなぜそれらを使用しますか?例を挙げてください。
クロージャは、クロージャの作成時にスコープ内にあるすべての変数または他の関数を含む関数です。 JavaScript では、クロージャは「内部関数」の形式で実装されます。これは、別の関数の本体内で定義される関数です。以下に簡単な例を示します:
(function outerFunc(outerArg) { var outerVar = 3; (function middleFunc(middleArg) { var middleVar = 4; (function innerFunc(innerArg) { var innerVar = 5; // EXAMPLE OF SCOPE IN CLOSURE: // Variables from innerFunc, middleFunc, and outerFunc, // as well as the global namespace, are ALL in scope here. console.log("outerArg="+outerArg+ " middleArg="+middleArg+ " innerArg="+innerArg+"\n"+ " outerVar="+outerVar+ " middleVar="+middleVar+ " innerVar="+innerVar); // --------------- THIS WILL LOG: --------------- // outerArg=123 middleArg=456 innerArg=789 // outerVar=3 middleVar=4 innerVar=5 })(789); })(456); })(123);
クロージャの重要な特徴は、外部関数が戻った後でも内部関数が外部関数の変数にアクセスできることです。これは、JavaScript では、関数が実行されるときに、関数の作成時に有効だったスコープが引き続き使用されるためです。
ただし、内部関数が (作成時ではなく) 呼び出されたときに外部関数の変数の値にアクセスすると、混乱が生じる可能性があります。候補者がこのニュアンスを理解しているかどうかをテストするには、次のコード スニペットを使用します。これにより、動的に 5 つのボタンが作成され、ユーザーが 3 番目のボタンをクリックしたときに何が表示されるかを候補者に尋ねます:
function addButtons(numButtons) { for (var i = 0; i < numButtons; i++) { var button = document.createElement('input'); button.type = 'button'; button.value = 'Button ' + (i + 1); button.onclick = function() { alert('Button ' + (i + 1) + ' clicked'); }; document.body.appendChild(button); document.body.appendChild(document.createElement('br')); } }window.onload = function() { addButtons(5); };
多くの人が誤解しています。ユーザーが 3 番目のボタンをクリックすると、「ボタン 3 がクリックされました」と表示されます。実際、上記のコードには (クロージャの誤解に基づく) バグが含まれており、ユーザーが 5 つのボタンのいずれかをクリックすると、「ボタン 6 がクリックされました」と表示されます。これは、onclick メソッドが (任意のボタンに対して) 呼び出されるまでに、for ループが完了し、変数 i の値がすでに 5 になっているためです。
次に、予想される動作 (つまり、ボタン n をクリックすると「ボタン n がクリックされました」と表示される) が得られるように、上記のコードのエラーを修正する方法を候補者に尋ねることができます。受験者が正しい答えを出せた場合は、以下に示すように、クロージャの正しい使い方を知っていることになります:
function addButtons(numButtons) { for (var i = 0; i < numButtons; i++) { var button = document.createElement('input'); button.type = 'button'; button.value = 'Button ' + (i + 1); // HERE'S THE FIX: // Employ the Immediately-Invoked Function Expression (IIFE) // pattern to achieve the desired behavior: button.onclick = function(buttonIndex) { return function() { alert('Button ' + (buttonIndex + 1) + ' clicked'); }; }(i); document.body.appendChild(button); document.body.appendChild(document.createElement('br')); } }window.onload = function() { addButtons(5); };
この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、注目してください。 PHP 中国語 Web サイトの他の関連記事へ!
推奨読書:
以上がJS の概念に関する質問の概要と回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

Linux での system() 関数の概要 Linux システムでは、system() 関数は非常に一般的に使用される関数であり、コマンド ライン コマンドの実行に使用できます。この記事では、system() 関数を詳細に紹介し、いくつかの具体的なコード例を示します。 1. system() 関数の基本的な使用法 system() 関数の宣言は次のとおりです: intsystem(constchar*command); コマンド パラメーターは文字です。

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。
