大部分の対象向けプログラミング言語は、「クラス」を対象とした体系の文法的基礎である. JavaScript言語はそうではありません.オブジェクト指向プログラミングは「原型オブジェクト」に基づいています.
一、グローバルオブジェクトObject
構築関数JavaScriptは構造関数によって新しいオブジェクトを生成するので、構造関数はオブジェクトのテンプレートとして見られます.インスタンスオブジェクトの属性と方法は、コンストラクタの内部に定義されます.
function Object(){this. 1 = 'aa'};//
var 1 = new Object();//
オブジェクト例プロトタイプオブジェクト上のすべての属性と方法は、派生オブジェクトによって共有されます.これがJavaScript継承メカニズムの基本設計です.
1. 1//'aa'
コンストラクタのprototypeオブジェクト構造関数によってインスタンスオブジェクトを生成すると、プロトタイプオブジェクトが自動的にインスタンスオブジェクトに割り当てられます.各コンストラクタにはプロトタイプの属性があります.この属性はインスタンスオブジェクトのプロトタイプオブジェクトです.オブジェクトのプロトタイプに属性と方法を追加する場合、プロトタイプの属性によって追加されます.
Object.prototype. 2 = ‘bb’
1. 2//'bb'
直接にオブジェクトのインスタンスに属性と方法を追加すると、近くの原則として、まずインスタンス上の属性に行き、プロトタイプチェーンにを探さなかった.
1. 3 = ‘cc';
1. 3//'cc'
1. 2//‘bb’
1. 1//‘aa’
Object.prototypeオブジェクトの原型Object.prototypeオブジェクトの原型は、属性や方法がないnullオブジェクトです.nullオブジェクトは自分の原型がありません.
Object.getPrototypeOf(Object.prototype)// null
プロトタイプチェーンオブジェクトの属性や方法は、自分自身で定義されている可能性もありますし、モデルオブジェクトで定義されている可能性もあります.原型自体も対象であり、自分の原型があるため、プロトタイプチャーンが形成されました.
1._proto_===Object.prototype
Object.prototype._proto_ null
prototypeオブジェクトにはconstructor属性があり、デフォルトではprototypeオブジェクトの配置関数を指します.
constructor属性がprototypeオブジェクト上で定義されているため、全てのインスタンスオブジェクトにを継承することができることを意味する.
constructor:function Object()
すべてのオブジェクトのプロトタイプは最終的にObject.prototypeに遡ることができます.すなわちObjectコンストラクタのprototype属性が指すオブジェクトです.
1_proto_ prototype
_proto_ === .prototype
二、グローバルオブジェクトFunction
グローバルのFunctionオブジェクトには、自分の属性と方法がありません.は、自身も関数であるため、プロトタイプチェーンを介してFuntion.prototypeから部分的な属性と方法を継承することもある. Functionは、構造関数である.
Function関数によって新しいFunctionオブジェクトを生成することができます.JavaScriptでは、各関数は実際には一つのFunctionオブジェクトです.
var = new Function()
構築関数の原型Function._proto_===Object.prototype
したがって、関数の例は、自分のコンストラクタprototypeオブジェクトの属性と方法に加えて、Objectのprototypeの属性と方法を継承します.
三、グローバルオブジェクトAray
配列は同様のリストのオブジェクトであり、プロトタイプにはエルゴードおよび要素を変更する多くの方法が提供されている.配列の長さおよび要素のタイプは固定されていない.キーの名前は順序正しい数値で、0からです.
構築関数function Array()
オブジェクト例var = new Array()
プロトタイプ ._proto_===Array.prototype
._proto_._proto_===Object.prototype
したがって、関数はオブジェクトで、オブジェクトの属性方法を継承します.