JavaScriptはプロトタイプに基づいているという意味ですか?
2560 ワード
JavaScriptとOOPを最初に学び始めたとき、JavaScriptはオブジェクト指向の言語ですが、クラスに基づいていませんが、プロトタイプではありませんでした.
この記事では、私たちは、これが何を意味するのかを理解しようとします.そして、なぜプロトタイプが何をしているかを認識することが重要である理由を理解しようとします.
クラスを宣言するときに、他のオブジェクト指向言語では、新しい複雑なデータ型、すなわち、プリミティブデータ型で構成されるデータ型を作成しています.しかし、これはES 2015からキーワードクラスを使用していても、JavaScriptで起こることではありません.プロトタイプはオブジェクトインスタンスです.クラスが青写真である間、オブジェクトはJavaScriptでデフォルトで他のオブジェクトから直接継承します.
畝
この意味を理解するためには、プロトタイプのチェーンを理解する必要があります.
プロトタイプのチェーンは、オブジェクトの機能を接続し、この木の根元にある木の形の構造です.プロトタイプのレイアウト
オブジェクト.プロトタイプはtoString ()、hasownproperty ()やkeys ()などのすべてのオブジェクトに表示されるいくつかのメソッドを提供します.
JavaScriptのほとんどすべてのオブジェクトは、プロトタイプのチェーンに従ってオブジェクトのインスタンスです.そして、あなたがおそらく知っているように、JavaScriptのほとんどすべてはオブジェクトです、したがって、配列はオブジェクトです、機能はオブジェクトです、そして、もちろん、オブジェクトはオブジェクトです.
プロトタイプのチェーンでは、例えば、マップ、foreach、reduce、filter、bigなどの配列で利用可能なすべてのメソッドにアクセスできる配列のインスタンスを作成することができますが、配列にはすべてのオブジェクトにアクセスできます.プロトタイプ機能
畝
どうやって起こるの?
例のために配列を使用しているので、明らかにするために、配列はJavaScriptの構文上の砂糖です.彼らは、彼らを見て、配列のように感じるようにする特別なふるまいで、しかし、フードの下で、彼らは以下のようなものです:
畝
すべてのオブジェクトは、コンストラクタのプロトタイプオブジェクトに対する参照を保持しています.したがって、配列の例の後に、配列には、オブジェクトのすべてのメソッドへのアクセスがあります.すべての配列が配列オブジェクトのインスタンスであるので、プロトタイプオブジェクトはオブジェクトオブジェクトのインスタンスです.そして、我々がオブジェクトのプロトタイプを打つまで、このチェーンは進みます.NULLになるプロトタイプ.
この方法では、オブジェクトのメソッドを実行しようとすると、最初のJSはオブジェクト自体のプロパティを参照します.その名前を持つプロパティが見つからない場合は、そのコンストラクタのプロトタイプオブジェクトへの参照を保持している、Count - Range - ProperRangeプロパティを検索します.それが見つからなければ、コンストラクタオブジェクトのCount - Range ProtoRangeプロパティを見ます.これが見つけられるか、それを見つけないか、TypeErrorをスローするまで、これは続きます.
畝
これが意味するのは、たとえば、配列を宣言するたびに、言語が付属する配列オブジェクトのインスタンスを作成していることです.コンソールで見てみると、その角のオブジェクトに対してChangRange ProtoRangeプロパティがリンクされていることがわかります.
畝
even some primitive data types (string, boolean and number specifically) can be objects for a tiny fraction of time.
畝
そして、ウサギの穴を見下ろさないようにしておくならば、私たちは、Count - Chineseのオブジェクトは、オブジェクトへの参照を保持しています.プロトタイプ(それは、あなたが知っているので、あなたがコンソールですべての特性を見るけれども、乾いています).
畝
畝
したがって、JavaScriptでプロトタイプなしでオブジェクトを作成する方法がありますか?
まあ、はい.オブジェクトを作成する方法の1つはオブジェクトです.を作成します.プロトタイプ.引数としてNULLを渡すと、それはちょうどハッシュテーブルであるオブジェクトを得ます.
共有は、それが好きなら、接続しましょう!フォローオンミー😊
この記事では、私たちは、これが何を意味するのかを理解しようとします.そして、なぜプロトタイプが何をしているかを認識することが重要である理由を理解しようとします.
クラスを宣言するときに、他のオブジェクト指向言語では、新しい複雑なデータ型、すなわち、プリミティブデータ型で構成されるデータ型を作成しています.しかし、これはES 2015からキーワードクラスを使用していても、JavaScriptで起こることではありません.プロトタイプはオブジェクトインスタンスです.クラスが青写真である間、オブジェクトはJavaScriptでデフォルトで他のオブジェクトから直接継承します.
畝
この意味を理解するためには、プロトタイプのチェーンを理解する必要があります.
プロトタイプのチェーンは、オブジェクトの機能を接続し、この木の根元にある木の形の構造です.プロトタイプのレイアウト
オブジェクト.プロトタイプはtoString ()、hasownproperty ()やkeys ()などのすべてのオブジェクトに表示されるいくつかのメソッドを提供します.
JavaScriptのほとんどすべてのオブジェクトは、プロトタイプのチェーンに従ってオブジェクトのインスタンスです.そして、あなたがおそらく知っているように、JavaScriptのほとんどすべてはオブジェクトです、したがって、配列はオブジェクトです、機能はオブジェクトです、そして、もちろん、オブジェクトはオブジェクトです.
プロトタイプのチェーンでは、例えば、マップ、foreach、reduce、filter、bigなどの配列で利用可能なすべてのメソッドにアクセスできる配列のインスタンスを作成することができますが、配列にはすべてのオブジェクトにアクセスできます.プロトタイプ機能
畝
どうやって起こるの?
例のために配列を使用しているので、明らかにするために、配列はJavaScriptの構文上の砂糖です.彼らは、彼らを見て、配列のように感じるようにする特別なふるまいで、しかし、フードの下で、彼らは以下のようなものです:
畝
{
'0': value,
'1': value,
'2': value
}
畝すべてのオブジェクトは、コンストラクタのプロトタイプオブジェクトに対する参照を保持しています.したがって、配列の例の後に、配列には、オブジェクトのすべてのメソッドへのアクセスがあります.すべての配列が配列オブジェクトのインスタンスであるので、プロトタイプオブジェクトはオブジェクトオブジェクトのインスタンスです.そして、我々がオブジェクトのプロトタイプを打つまで、このチェーンは進みます.NULLになるプロトタイプ.
この方法では、オブジェクトのメソッドを実行しようとすると、最初のJSはオブジェクト自体のプロパティを参照します.その名前を持つプロパティが見つからない場合は、そのコンストラクタのプロトタイプオブジェクトへの参照を保持している、Count - Range - ProperRangeプロパティを検索します.それが見つからなければ、コンストラクタオブジェクトのCount - Range ProtoRangeプロパティを見ます.これが見つけられるか、それを見つけないか、TypeErrorをスローするまで、これは続きます.
畝
これが意味するのは、たとえば、配列を宣言するたびに、言語が付属する配列オブジェクトのインスタンスを作成していることです.コンソールで見てみると、その角のオブジェクトに対してChangRange ProtoRangeプロパティがリンクされていることがわかります.
畝
even some primitive data types (string, boolean and number specifically) can be objects for a tiny fraction of time.
畝
そして、ウサギの穴を見下ろさないようにしておくならば、私たちは、Count - Chineseのオブジェクトは、オブジェクトへの参照を保持しています.プロトタイプ(それは、あなたが知っているので、あなたがコンソールですべての特性を見るけれども、乾いています).
畝
畝
したがって、JavaScriptでプロトタイプなしでオブジェクトを作成する方法がありますか?
まあ、はい.オブジェクトを作成する方法の1つはオブジェクトです.を作成します.プロトタイプ.引数としてNULLを渡すと、それはちょうどハッシュテーブルであるオブジェクトを得ます.
const objectWithoutPrototype = Object.create(null);
畝共有は、それが好きなら、接続しましょう!フォローオンミー😊
Reference
この問題について(JavaScriptはプロトタイプに基づいているという意味ですか?), 我々は、より多くの情報をここで見つけました https://dev.to/cec1_c0d/what-does-it-mean-that-javascript-is-prototype-based-30jfテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol