JavaScript プロトタイプ、実行、コンテキスト、closure_prototype

WBOY
リリース: 2016-05-16 18:57:09
オリジナル
892 人が閲覧しました

JavaScript を上手に学ぶには、プロトタイプ、実行、コンテキスト、クロージャといういくつかの基本概念を理解する必要があります。
プロトタイプ

JavaScript 言語では、通常、プロトタイプは OO の実装に使用されます。ここでは、JavaScript の OO 実装についてはあまり説明せず、JS のオブジェクトのメモリ モデルに焦点を当てます。開始する前に、次の点を明確にする必要があります:
1. JS には、文字列、数値、ブール値、オブジェクト、関数のデータ型があります (注: 最初の文字はすべて小文字です)。
2 「Object」、「String」、「Date」およびその他の組み込みデータ型は、実際には JS の関数名です (確認するには「alert(typeof Object)」を使用します。出力は「function」です)。通常「Date」と呼ばれるデータ型は、実際には「new Date」によって生成されたオブジェクトです。
3. JavaScript では、オブジェクトはすべて連想配列 (ハッシュ テーブル) であり、オブジェクトのプロパティを動的に指定できます。
4. Firefox の「__proto__」属性を使用して、オブジェクトの「プロトタイプ」を表示できます。

簡単な例を見てみましょう:

function Person() { this.age = 10; this.name = "test";}Person.prototype = new Object;var p = new Person;alert(p); // 出力 "[object Object]"alert(p.__proto__); // 出力 "[object Object]"

Person データ型が "プロトタイプ」を変更すると、これまでに生成されたすべての パーソン タイプのオブジェクトに影響し、今後作成される パーソン タイプのオブジェクトにも影響します。関数のプロトタイプ属性を指定すると、その関数を使用して (new 演算子を使用して) 生成されたすべてのオブジェクト インスタンスにプロトタイプが設定され、Firefox では「__proto__」属性を使用してアクセスできます。

通常、JS のオブジェクトは Object データ型を継承すると言いますが、これはどのように反映されるのでしょうか。上記のプログラムを少し変更してみましょう:

function Person() { this.age = 10; this.name = "test";}var p = new Person;alert(p); Object]"alert(p.__proto__); // 出力 "[object Object]"alert(p.__proto__.__proto__); // 出力 "[object Object]"alert(p.__proto__.__proto__ == Object.proto__) ; // "true" を出力します。alert(p.__proto__.__proto__.__proto__); // "null" を出力します。

上記のプログラムからわかるように、人の「プロトタイプ」は明確ではありません。 Person.prototype を指定しますが、デフォルト値を使用します) 「プロトタイプ」 (p.__proto__.__proto__) は正確に Object.prototype であり、Object.prototype はプロトタイプ チェーンの終端です (それ自体の祖先は null)。

JS では、オブジェクトは関数であり、関数のすべてのインスタンスもオブジェクトです。次のプログラムを見てください:

/* オブジェクトと関数は両方とも関数データ型です*/alert(typeof Object); // 出力 "関数"alert(typeof Function); // 出力 "関数"/ * Function プロトタイプは空の関数です */alert(Function.prototype); // 出力 "function() {}"alert(Function.__proto__ == Function.prototype); // 出力 "true"/* 関数はオブジェクトですプロトタイプ チェーンの終点は Object.prototype */alert(Function.__proto__.__proto__ == Object.prototype); //output "true"/* オブジェクトは function のインスタンスです*/alert(Object.__proto__) == Function.prototype) ; // 出力 "true" アラート(Object.__proto__.__proto__ == Object.prototype); // 出力 "true" Function.prototype を変更すると "Object" に影響し、Object.prototype を変更すると影響を受けます関数のすべてのインスタンス。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!