Prototypeproto_Funct

2489 ワード

最近地下鉄で「Javascript言語の精粋とプログラミングの実践」を読み返して、また新しい理解ができました.
原型引継ぎ
対象に向かう言語には、パッケージ性、継承性、多状態の三つの特性がある.一般的に、三つの特性が満足することを対象言語といいます.
「対象システム」の継承特性には、クラスベース、プロトタイプベース、タプルベースの3つの実装があります.Javascriptは原型継承に基づいて対象システムを実現した.「コンストラクタ」という仕組みを使って、このような機能を実現します.
JavaScriptでは、関数が作成された後にプロトタイプの属性があります.この属性は関数のプロトタイプのオブジェクトを指します.
すなわち、
function T(){
  //    
}
T.prototype ===     
T = T.prototype.constructor
JavaScript言語と対象システムの実装では、オブジェクトはプロトタイプではなく、プロトタイプ、属性「.prototype」がプロトタイプを指します.対象は「ある原型から作られたもの」のみで、「ある原型を持つ」ものは存在しません.
原型も対象です.すなわち原型は対象の一例です.プロトタイプの意味は、プロトタイプのオブジェクトAがビルダーによって作成されたインスタンス(instance)がすべてAからコピーされるということです.したがって、インスタンスは、Aのすべての属性、方法、および他の性質を継承する.
原型も対象例です.
コンストラクタTがあると仮定して、TのプロトタイプはM、Tは関数(Function)であり、Mはオブジェクト(OBJECT)である.
T.prototype=M
原型オブジェクトMにはコンストラクタの属性がコンストラクタ自体に向けられています.
M.com nstructor=T=T.prototype.com nstructorです.
プロトタイプオブジェクトMもオブジェクト(OBJECT)の一例である.オブジェクト(OBJECT)もコンストラクタです.Objectの原型の対象は何ですか?実現してもらえます.
Object.prototype  //  {}     
Objectもコンストラクタで、Objectも関数ですので、
Object.constructor  // Function
Functionにとって、Functionは一つの関数であり、また一つのコンストラクタでもあり、Functionのプロトタイプのオブジェクトは
Function.prototype
MDNから説明を見つけました.
The **Function.prototype** property represents the Function prototype object.Function object s inherst from Function.prototype.Function.prototype cannot be modified.
Function.prototype属性はFunctionの原型オブジェクトを記憶しています.FunctionオブジェクトはFunction.prototypeから引き継がれますので、Function.prototypeは修正されません.
さて、FunctionのプロトタイプオブジェクトFunction.prototypeもObjectの一例である.
原型チェーン
JavaScriptでは、各関数にプロトタイプの属性があり、コンストラクタのプロトタイプを指していますが、オブジェクトには隠れたタイプがあります.プロト.属性、プロトタイプを指します.
えっと、えっとproto_==constructor.prototype
では、コンストラクタオブジェクトの原型オブジェクトObject.prototypeは空のオブジェクトです.
だからOject.prototypeは全ての対象の元です.
Function.prototypeはObject.prototypeから構成されています.
Funtion.prototype.u.proto_=Object.prototype
空のオブジェクト{}(Object.prototype)はnullから来ています.
つまりObject.prototype._uproto_==null//true
属性の検索
オブジェクトの属性を検索すると、Javascriptは、指定された名前の属性が見つかるまでプロトタイプチェーンの先端にあるObject.prototypeを検索します.指定された属性が見つからないままundefinedに戻ります.
オブジェクトの属性を検索するときは、まず自分の属性を検索して、プロトタイプを検索し、Objectのプロトタイプにアップロードします.
ハスOwnProperty関数:
hasOwnPropertyはObject.prototypeの一つの方法です.これは良いものです.彼はオブジェクトがプロトタイプチェーンの属性ではなくカスタム属性を含むかどうかを判断できます.hasOwnPropertyはJavaScriptの中で唯一の処理属性ですが、プロトタイプチェーンの関数を調べません.