JavaScriptプロトタイプについて


始める前に。


用語では、MDN
ECMAScript規格はsomeObjectです.[Prototype]がオブジェクトsomeObjectのプロトタイプであることを示します.ECMAScript 2015から[Prototype]の祖先オブジェクトを開始します.getPrototypeOf()とObject.setPrototypeOf()を使用してアクセスするためです.これは、JavaScriptの標準ではないが、多くのブラウザで実装されている、事実上標準となっている属性__proto__と同じである.
標準では[prototype]ですが、ブラウザでは__proto__、まずクロムでは__proto__、確認できます.

プロトタイプ


ネットワーク学習を行う過程で,今回の課題はプロトタイプを用いた.JavaScriptで何度もやっていますが、この単語は初めて聞きました.不思議ですね.しかし問題は解決する必要があり、今回もMDNjavascript.infoを借りてプロトタイプとは何かを理解した.

prototypeとproto


javascriptでは、各関数にprototypeという特殊な属性があります.関数を宣言すると、その関数のプロトタイプが生成されます.次に、ある変数に対してnewキーワードとして関数を呼び出すと、変数の__proto__が関数のプロトタイプを指す.
function A(){}
このように関数を宣言すると、その関数が宣言されると、実際にはプロトタイプが一緒に生成されます.次に、このAをaという名前の変数を使用するとnew A()が割り当てられる.a __proto__という非表示属性があります.
let a = new A();
a.__proto__;
まだあります.a.__proto__を見て
-> constructor : f A()
-> __proto__ : Object
こうして出てきた
aの__proto__は、Aのプロトタイプを参照してnewを呼び出すときに作成される.aではなくnew A()によって生成された他の変数であれば、__proto__はAのPrototypeを指す.
b = new A();
c = new A();

A.prototype.type = 'abc';

a.type; // 'abc'
b.type; // 'abc'
c.type; // 'abc'

プロトタイプチェーンと継承


Aの原型をよく見ると、

aの__proto__はAの原型を指し、このAの原型の__proto__は対象を指す.
Aだけでなく、すべての対象の原型に乗って、その果てはObject.prototypeです.
このような連続接続のプロトコルタイプはプロトタイプチェーンと呼ばれ、これを利用すると継承使用と同様に使用することができる.
もし私たちがaにない属性を使用するならば、まずaの内部で探して、もしないならば、aの__proto__を探します.実際のaになくても、継承されたプロトタイプであれば使用できます.そして、そこにもなかったら__proto__に乗り続けます.結果はObject原型に着いても見つからなければ、ないと思って定義していません.
したがって,単独で作成しなくても,オブジェクトにtoString,valueOfなどのオブジェクトの機能を使用することができる.

の最後の部分


理解するように書いてありますが、概要が一つしかないようで、これからもっと勉強して、補足して書きます.プロトタイプの使用とClassキーワードと一般関数で生成した違いなど,疑問がある.やることはたくさんあるが、簡単には減らない.まじめにやるんだ
MDNとjsinfoのほか、本ブログの内容もよくまとめられています.
https://velog.io/@adam2/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Prototype-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC