(JavaScript)原型と原型の対象

3017 ワード

初めて自分の勉強のペースを記録しました.JavaScriptの中で、自分がよく知っていると思っている部分を選びました.このノートを見て、このノートから知識を得たいという読者に対しては、権威を参考にして、自分の真実の見通しを持って、家族の話を聞かないようにしてください.
1.原型、原型の対象は何ですか?
*1.プロトタイプは関数の属性で、この属性はプロトタイプのオブジェクトを指すポインタです.2.プロトタイプオブジェクトは、その関数に属する空のオブジェクトで、関数に属性と方法を追加できます.注目すべきはプロトタイプのオブジェクトも属性を持っています.constructorはその関数を指しています.
一枚の図を通して、これらの関係をよりよく理解することができます.
上の図は、いくつかの情報を伝えています.*1.例は、構造関数のプロトタイプを指している属性を持っています.2.元のオブジェクトも構造関数の例*
2.じゃ、これは何に使いますか?
JavaScriptは対象に基づく言語であり、Javaなどの言語とは違って、JavaScriptに類のない概念であることを知っています.クラスの機能を実現するにはアナログが必要です.モデルとプロトタイプのオブジェクトを使用すると、より良いパッケージ、共有クラス(オブジェクト)を作成することができますが、このクラス(オブジェクト)を作成するモードはプロトタイプと呼ばれます.
これはまた、オブジェクトを作成するためにプロトタイプおよびプロトタイプのオブジェクトを記述する理由として、プロトタイプおよびプロトタイプのオブジェクトを説明したが、「JavaScript権威ガイド」では、プロトタイプおよびプロトタイプのオブジェクトを作成するために説明した.(JavaScriptにはクラスがないので、クラスも対象だけでシミュレーションされたものがあります.ES 6のクラスのキーワードも含みます.)
3.どうやって使うべきですか?
プロトタイプの模擬類はとても簡単です.
var Foo = function(){}
Foo.prototype.username = 'ec'
console.log(Foo.prototype)  // --> a{username = 'ec'}
var f = new Foo()
console.log(f.username)     //--> 'ec'
console.log(Foo.username)   //--> underfined
2つの情報を見つけることができます.*1.プロトタイプのオブジェクトはその所在関数と同名です.属性はプロトタイプのオブジェクトに追加されました.3.使用時はプロトタイプの関数を実装しなければなりません.*
注意したいのはプロトタイプのアナログ類に欠点があります.例えば、以下のコードです.
function Person(){}
Person.prototype = {
  constructor: Person,
  name: "   ",
  age: 20,
  family: [
    "   ",
    "   ",
  ],
}
var person1 = new Person()
var person2 = new Person()
person1.family.push("   ")
console.log(person1.family)  //--> ["   ", "   ", "   "]
console.log(person2.family)  //--> ["   ", "   ", "   "]
上記の例からいくつかの情報を得ることができます.*1.プロトタイプはプロトタイプのオブジェクトに属性と方法を追加することを規定していますので、初期化パラメータを渡すことができません.2.過度の共有のため、一例では参照タイプの値が変更されます.すべての実例の値は変更されます.
以上の原因で純粋なプロトタイプを使用してオブジェクトを作成することが少なくなりましたが、他の混合はプロトタイプを使用した作成対象パターンはここでは展開しませんでした.
4.まだ原型の対象、対象、関数がよく分かりません.
やっとこの部分に言及しました.この部分はもっと具体的な問題を提出できます.原型のオブジェクトと対象、関数、構造関数、実例の関係は何ですか?まず関数とコンストラクタの違いです.
  • コンストラクタはnewオペレータの実装が必要です.
  • コンストラクタにはreturn文がありません.
  • コンストラクタthisは、コンストラクタ自体を呼び出すことが多いが、関数はthisを使用すると、window全体のオブジェクト
  • を指す.
  • コンストラクション名の最初の文字(非強制的)
  • 例としては、構造関数が作成したオブジェクトで、構造関数の属性と方法があります.
    これらを知ったら、私たちはこの図を通して、それらの関係を明確にすることができます.
    この図は人を脅かすように見えるが、実は3時だけ知っていてもいいです.1.JavaScriptの中ではすべて対象です.すべてのオブジェクトには「プロトタイプ」属性があり、その構造関数を指すプロトタイプがあります.3.すべての関数にプロトタイプ属性があり、そのプロトタイプのオブジェクトを指します.4.すべてのインスタンスにはconstructurtor属性があり、その構造関数を指します.
    図の中に二つのところがありますが、分かりにくいかもしれません.
  • はなぜ、オブジェクトFunction()を内蔵するプロトタイプオブジェクトfunction()が関数オブジェクトですか?
  • オブジェクトを内蔵するFunction()も関数であり、関数がfunctionであることから、鶏の卵や卵を生む問題が生じ、Function()の元のオブジェクトを関数として関数を追加することができます.
  • 内蔵オブジェクトの原型オブジェクトの属性は誰を指しますか?
  • これも鶏の卵、卵の卵のニワトリの問題で、対象がオブジェクトを創建したのです.答えはNull空です.(図中のこの場所は矢印が間違っていますので、ご了承ください)
    これまでJavaScriptにはプロトタイプに関する基本的な知識がありましたが、実はまだ多くの問題があります.例えばプロトタイプよりもっと良いオブジェクトパターンを作成しました.また、関係図には継承に関する部分があります.詳しく説明していません.紙幅に限りがありますので、また今度お話します.