今日の JavaScript は、かつてのように Web ページ上でおもちゃとして実行される派手なスクリプトではなくなりました。 JavaScript は徐々に標準化され、真のプログラミング言語として Web 開発で広く使用されています。したがって、ますます多くの人がこのスクリプト言語を再認識し始めており、JavaScript の中核となるアイデアと実装原則を常に探求していますが、その過程で非常にややこしい問題に遭遇しています。この記事では、開発者や JavaScript を初めて使用する人を混乱させやすい一般的な問題、つまり 2 つのコア コンストラクターである Object と Function の関係について説明することに重点を置いています。 instanceof 演算子の戻り結果を見て混乱するのはなぜですか?この記事では一つずつお伝えしていきます。しかしその前に、JavaScript の概念と基本的な操作メカニズムを理解する必要があります。
JavaScript のオブジェクト アーキテクチャ
実際、JavaScript 言語では、コア アーキテクチャ全体が 2 つのコンストラクター (Object と Function) を中心に構築されています。 mollypages.org から JavaScript オブジェクト アーキテクチャ図を引用して説明します。
instanceof 演算子
instanceof は、次のような二項演算子です: Ainstanceof B。そのうち、A は正当な JavaScript オブジェクトでなければならず、B は正当な JavaScript オブジェクトである必要があります。 JavaScript 関数の判定プロセスは次のとおりです:
オブジェクト A のプロトタイプ チェーンに関数 B が見つかった場合、instanceof 演算子は true を返し、それ以外の場合は false を返します。
たとえば、次のコードです。
// 指定された関数がコンストラクターとしてオブジェクトのプロトタイプ チェーンで見つかった場合は true を返します。alert({} instanceof Object);
JavaScript プロトタイプチェーンメカニズム
については、ここで簡単に要約します。このトピックについて説明するには多くのスペースが必要となるため、この記事ではこの概念を引用するだけであり、メカニズムについて詳しく説明することに焦点を当てていません。
JavaScript のプロトタイプは関数と密接に関連しています。各関数にはデフォルトでプロトタイプと呼ばれる属性があり、関数と new 演算子を通じて生成されたすべてのオブジェクトには属性 __proto__ があり、このプロパティはプロトタイプ プロパティへの参照を保持します。それを作成したコンストラクターの。この __proto__ オブジェクトは、プロトタイプ チェーンを実装するコア オブジェクトです。 JavaScript はオブジェクト指向プログラミング言語であり、その継承機能は実際にはプロトタイプ チェーン メカニズムを通じて実装されます。同時に、instanceof 演算子もプロトタイプ チェーンでのサポートが必要です。例を示します。
コード
/ / カスタム コンストラクターを作成します Foo
function Foo() {
}
// Foo のインスタンスを作成します
var foo = new Foo(); / foo は Foo のインスタンスです
alert(foo instanceof Foo);// true
//
// Foo.prototype は Object のインスタンスであるため、foo も Object のインスタンスです。 // インタプリタはプロトタイプ チェーンを通じてコンストラクター
// を見つけます。
alert(foo instanceof Object);// true
// オブジェクトのプロトタイプ チェーン foo
//
/ / __proto__ __proto__ __proto__
// foo -----------> Foo.prototype -----------> Object.prototype ---- ---- ---> null
// しかし、
// foo の
// プロトタイプ チェーンで Function.prototype が見つからないため、foo は Function のインスタンスではありません。
alert (foo instanceof Function);// false
// ただし、そのコンストラクター Foo は
// Function のインスタンスです。
alert(Foo instanceof Function);// true
// オブジェクトのインスタンスでもあります
alert(Foo instanceof Object);// true
// コンストラクター Foo のプロトタイプ チェーン
//
// __proto__ __proto__ __proto__
// Foo -----------> Function.prototype -----------> Object.prototype ----------- > null
上記のコードの分析から、任意のオブジェクトのプロトタイプ チェーンは Object.prototype に遡ることができるという結論を引き出すのは難しくありません。これが、JavaScript のすべてのオブジェクトが Object.prototype を継承していると言われる理由です。オブジェクトの理由。
関数のオブジェクトのインスタンスとオブジェクトの関数のインスタンスの両方が true を返すのはなぜですか?
オブジェクト、関数、配列などはすべてコンストラクター「関数」と呼ばれ、すべて関数です。すべての関数はコンストラクター Function のインスタンスです。プロトタイプ チェーン メカニズムの観点から見ると、これは、すべての関数が、プロトタイプ チェーンを通じて Function コンストラクターを作成した、構築されたプロトタイプ Function.protorype オブジェクトを見つけることができることを意味します。
alert(Objectinstanceof Function) ;// return true
同時に、Function.prototype はオブジェクトであるため、そのコンストラクターは Object です。プロトタイプ チェーン メカニズムの観点からは、すべての関数がプロトタイプ チェーンを通過できることを意味します。構築されたプロトタイプ Object.prototype を見つけます。
alert(Functioninstanceof Object);// return true
興味深いのは、プロトタイプチェーンメカニズムの分析を通じて、instanceof で何を行うかに基づいています。結論を導くのは難しくありません。関数instanceof Functionはtrueを返します。原理は同じです
1. 関数はコンストラクターであるため、関数オブジェクトです
2. 関数オブジェクトは関数によって作成されます。コンストラクター さて、プロトタイプ チェーンのメカニズムは次のように説明されます。 Function.prototype
が関数オブジェクトのプロトタイプ チェーンに存在します。 3.instanceof は、プロトタイプ チェーン内の各ノードを検索します。 Function のプロトタイプ チェーン、Return true
したがって、次のコードは true を返します
alert(Functioninstanceof Function);// それでも true
結論
1.つまり、すべてのオブジェクトのプロトタイプ チェーンのルート ノードは Object.prototype
2 です。JavaScript でのプロトタイプ チェーンの仕組みを理解することは非常に重要です。一度マスターすれば、オブジェクトがどれほど複雑であっても、いつでも簡単に倒すことができます。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
