ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript_09_Function および Object_javascript 手法を理解する

Javascript_09_Function および Object_javascript 手法を理解する

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

注: この理論は詳細すぎるため、変更はしません。ただし、複数のテストを行った結果、実際のコードと理論の間に矛盾は見つかりませんでした。間違いがあれば、誰かにアドバイスを求めてください。

関数
まず、関数オブジェクトの概念を確認してみましょう。関数を表すオブジェクトは関数オブジェクトです。すべての関数オブジェクトは Function オブジェクトから構築されます。言い換えれば、Function はトップレベルのコンストラクターです。ユーザー定義オブジェクト、システム組み込みオブジェクト、さらにはそれ自体を含む、システム内のすべてのオブジェクトを構築します。これは、Function がブートストラップ (自身を構築する機能) を備えていることも示しています。これは、Function の [[call]] と [[constructor]] が同じロジックを持つことも間接的に決定します。

コードをコピーします コードは次のとおりです。

function Foo() {}; >var foo = new Foo();
//Foo は foo
alert(foo instanceof Foo) のコンストラクターです // true
//しかし、関数は foo
alert のコンストラクターではありません。 (foo instanceof Function); // false
//関数は Foo のコンストラクターです
alert(Foo instanceof Function);//true

上記のコードは foo とそのコンストラクターを説明していますFoo Foo のコンストラクター Function との関係。 (具体的な原理については、Function と Object のメモリ関係図を参照してください)
Object
Object の場合、すべてのオブジェクトは Object のプロトタイプを継承しますが、これも明確に知っておく必要があります。そのオブジェクトは関数でもあるため、オブジェクトは関数によって構築されます。 (オブジェクトに関する理論はそれほど多くありません)

関数とオブジェクト
これがこの記事の焦点であり、非常に重要です。

コードをコピー コードは次のとおりです:
alert(FunctioninstanceofFunction);// true
alert(Object のインスタンスの関数);//true
alert(Function のインスタンス);//true
function Foo() {};
var foo = new Foo(); >alert( fooinstanceofFoo); // true
alert(fooinstanceofFunction); //false
alert(FooinstanceofFunction);
alert(FooinstanceofObject); // true


これらの答えを理解できますか?おめでとうございます。JavaScript 言語の本質を理解できました。
それでは、オブジェクトと関数の実際の関係を見てみましょう:


図を見る前に、関数オブジェクトとインスタンスの原則に関する 2 つの記事を読んでください。そうしないと、メモリ図が表示されなくなります。理解するのが難しいでしょう。
Javascript_09_Function および Object_javascript 手法を理解するここで、メモリグラフについて説明したいと思います。関数オブジェクトの構築プロセスについては、関数オブジェクトの記事で説明しています。この記事では、関数がブートストラップされると述べられているため、関数オブジェクトの構築プロセスについて説明します。関数オブジェクト Foo についても同様です。したがって、強調表示する図では、構築プロセスが同じであることを示すために「|」を使用してそれらを区切っています。インスタンスオブとメモリマップの理論によれば、上記のステートメントは正しい結果を導き出すことができます。ここではそれらを一つ一つ説明しません。読者はそれらを自分で体験してください。

この複雑なメモリ図が理解できない場合は、次の図を見て理解するとよいでしょう:


注: コードの実際の実行フローは正確には異なります。この図のように、つまり、この図には何か問題があります (間違っていると言えます)。なぜ Functioninstanceof Function が true であるのかを説明できません。 ただし、関数とオブジェクトの関係を理解するのは簡単です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。