ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript Object および Function_javascript スキルの使用

JavaScript Object および Function_javascript スキルの使用

WBOY
WBOYオリジナル
2016-05-16 18:36:32896ブラウズ

今日の JavaScript は、かつてのように Web ページ上でおもちゃとして実行される派手なスクリプトではなくなりました。 JavaScript は徐々に標準化され、真のプログラミング言語として Web 開発で広く使用されています。したがって、ますます多くの人がこのスクリプト言語を再認識し始めており、JavaScript の中核となるアイデアと実装原則を常に探求していますが、その過程で非常にややこしい問題に遭遇しています。この記事では、開発者や JavaScript を初めて使用する人を混乱させやすい一般的な問題、つまり 2 つのコア コンストラクターである Object と Function の関係について説明することに重点を置いています。 instanceof 演算子の戻り結果を見て混乱するのはなぜですか?この記事では一つずつお伝えしていきます。しかしその前に、JavaScript の概念と基本的な操作メカニズムを理解する必要があります。

JavaScript のオブジェクト アーキテクチャ

実際、JavaScript 言語では、コア アーキテクチャ全体が 2 つのコンストラクター (Object と Function) を中心に構築されています。 mollypages.org から JavaScript オブジェクト アーキテクチャ図を引用して説明します。
JavaScript Object および Function_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 でのプロトタイプ チェーンの仕組みを理解することは非常に重要です。一度マスターすれば、オブジェクトがどれほど複雑であっても、いつでも簡単に倒すことができます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。