検索
ホームページウェブフロントエンドjsチュートリアルNode.js の 4 つの JavaScript 概念の詳細な説明

Node.js の 4 つの JavaScript 概念の詳細な説明

フルスタック アプリケーションを構築するために 1 つのプログラミング言語を知るだけで済むとしたら、素晴らしいと思いませんか?このアイデアを現実にするために、Ryan Dahl はnode.js を作成しました。 Node.js は、Chrome の強力な V8 JavaScript エンジン上に構築されたサーバー側フレームワークです。元々は C++ で書かれていましたが、アプリケーションは JavaScript を通じて実行されます。

このようにして、問題は解決されます。 1 つの言語ですべてを支配できます。さらに、アプリケーション全体でこの 1 つの言語を使用するだけで済みます。したがって、node.js について深く理解する必要があります。それがこの記事の内容です。

node.jsを使いこなすには、次の4つの基本概念が必要です。できるだけ短いストーリーで紹介していきます。

1. ノンブロッキングまたは非同期 I/O

Node.js はサーバー側のフレームワークであるため、その主な仕事の 1 つはブラウザーのリクエストを処理することです。従来の I/O システムでは、前のリクエストからの応答 (HTML ページ) が到着するまで、現在のリクエストは発行されません。これがブロッキング I/O と呼ばれる理由です。サーバーは現在のリクエストを処理するために他のリクエストをブロックするため、ブラウザは待機します。

Node.js は、この I/O 原則に従っていません。リクエストに時間がかかる場合、Node.js はリクエストをイベント ループに送信し、コール スタック内の次のリクエストの処理を続けます。保留中のリクエストの処理が完了すると、Node.js に通知され、ブラウザ上に応答が表示されます。

これを理解するために架空の例を使用してください:

I/O のブロック

// take order for table 1 and wait...
var order1 = orderBlocking(['Coke', 'Iced Tea']);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking(['Coke', 'Water']);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking(['Iced Tea', 'Water']);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

このレストランの例では、ウェイターはメニューを渡し、注文が完了するのを待ち、テーブルに戻って規定に従って料理を提供します。メニュー。現在の顧客が注文している間、ウェイターは近くで待機しており、他の顧客のメニューは受け付けません。

ノンブロッキング I/O

// take order for table 1 and move on...
orderNonBlocking(['Coke', 'Iced Tea'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking(['Beer', 'Whiskey'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking(['Hamburger', 'Pizza'], function(food){
  return serveOrder(food);
});

この例では、ウェイターはメニューを取得し、シェフに通知し、別のメニューを取得するために戻ります。最初のメニューを完成させる過程で、彼は現在の顧客を順番に提供するだけでなく、他の顧客の注文も受け入れます。ウェイターは他の顧客からの注文をブロックして時間を無駄にすることはありません。

2. プロトタイプ

プロトタイプは JavaScript における複雑な概念です。ただし、Node.js ではプロトタイプを何度も使用するため、すべての JavaScript 開発者はこの概念を理解する必要があります。

Java や C++ などの古典的な継承を実装する言語、コードの再利用を目的とした言語では、まずクラスを作成し、次にそのクラスからオブジェクトを作成するか、そのクラスを拡張する必要があります。ただし、JavaScript にはクラスという概念が存在しません。まず JavaScript でオブジェクトを作成し、次にこのオブジェクトから独自のオブジェクトを追加するか、新しいオブジェクトを作成します。これは、原型の継承と原型による実現と呼ばれます。

すべての JavaScript オブジェクトは、プロパティを継承できるプロトタイプ オブジェクトにリンクされています。プロトタイプは他の OO 言語のクラスに似ていますが、プロトタイプ自体がオブジェクトでもあるという点が異なります。すべてのオブジェクトは Object.prototype にリンクされており、Object.prototype には事前定義された JavaScript が付属しています。

obj.propName または obj['propName'] を介してプロパティを検索し、そのオブジェクトに obj.hasOwnProperty('propName') を介してチェックできるプロパティがない場合、JavaScript ランタイムはそのプロパティを検索します。そのプロトタイプ オブジェクトの属性。プロトタイプ オブジェクトにそのようなプロパティがない場合は、一致するものが見つかるか、Object.prototype に到達するまで、そのプロトタイプが順番にチェックされます。プロパティのプロトタイプ チェーンが存在しない場合、値は未定義になります。

次のサンプル コードでこの概念を理解してください:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        var F = function () {};
        F.prototype = o;
        return new F();
    };
var otherPerson = Object.create(person);

新しいオブジェクトを作成するときは、そのプロトタイプとなるオブジェクトを選択する必要があります。ここでは、Object 関数にメソッドを追加します。このメソッドは、別のオブジェクトをプロトタイプとして使用して新しいオブジェクトを作成し、それをパラメーターとして渡します。

新しいオブジェクトを変更しても、そのプロトタイプは影響を受けません。ただし、プロトタイプ オブジェクトに変更を加えると、その変更はそのプロトタイプに基づくすべてのオブジェクトに表示されます。

プロトタイプは複雑な概念です。これについては別の記事で詳しく説明します。

3. モジュール

Java のパッケージに触れたことがあるなら、Node.js のモジュールも例外ではありません。そうでなくても、心配する必要はありません。モジュールは、特定の目的のためのコードを含む単純な JavaScript ファイルです。モジュール パターンは、コードを簡単にナビゲートして使用できるようにするために使用されます。 module 属性を使用するには、Java クラスにパッケージをインポートするのと同じように、JavaScript ファイルでそれを要求する必要があります。

node.jsには2種類のモジュールがあります。

コア モジュール - これらのモジュールは、Node.js ライブラリでプリコンパイルされています。コア モジュールの目的は、頻繁に発生する反復的なコード スニペットを開発者に提供することです。コード スニペットが利用できない場合、開発者は同じコードを何度も書かなければならない状況に陥ります。一般的なコア モジュールには、HTTP、URL、EVENTS、FILE SYSTEM などがあります。

用户定义模块——用户定义模块是开发人员在应用程序内创建用于特定目的的模块。当核心模块不能满足期望功能的时候就需要用户定义模块。

模块通过require函数提取。如果它是一个核心模块,那么参数仅仅是模块的名称。如果它是一个用户自定义模块,那么参数就是该模块在文件系统中的路径。例如:

// extract a core module like this
var http = require('http);
// extract a user defined module like this
var something = require('./folder1/folder2/folder3/something.js');

4.回调函数

在JavaScript中,函数被认为是第一类对象。这意味着你可以对这些函数做所有可对常规对象做的操作。你可以赋值函数给变量,作为参数传递函数给方法,作为对象属性声明函数,甚至从函数返回函数。

回调函数是JavaScript中的匿名函数,它可以作为参数传递给其他函数,要么被执行或返回自函数稍后执行。这是回调函数——这个使用最广的函数编程范式的基础。

当我们将回调函数作为参数传递给另一个函数的时候,我们只能传递函数定义……换言之就是,我们不知道这个回调函数什么时候会执行。这完全取决于调用函数的机制。它会在以后的某个时间点“回调”,因此而得名。这也是非阻塞或Node.js异步行为的唯一基础,如下例所示。

setTimeout(function() {
    console.log("world");
}, 2000)
console.log("hello");

这是回调函数最简单的例子之一。我们将一个匿名函数作为一个参数传递,这个参数只需在控制台上记录一些输出到setTimeout函数。它是唯一的函数定义,但是不知道何时执行。这需要经过2秒后,通过第二个参数,调用setTimeout函数来决定。

首先,第二个日志语句记录输出到控制台,然后,2秒钟后,回调函数中的日志语句记录输出。

// output
hello
world


以上がNode.js の 4 つの JavaScript 概念の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?Apr 04, 2025 pm 09:21 PM

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?Apr 04, 2025 pm 09:18 PM

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター