javascript prototypeプロトタイプチェーンを深く分析します.

2158 ワード

対象に向けたjavascriptプログラミングでは、オブジェクトインスタンスのある属性にアクセスすると、まずこのオブジェクトの中から探します.もし存在しないなら、対象の原型の中から探します.もしまだ存在しないなら、それに沿って探します.
プロトタイプチェーンを上に探してみます.ここのプロトタイプチェーンは具体的にどのような形ですか?
var Super = function(){
    this.superName = "super";
}

var Sub = function(){
    this.subName = "sub";
}

var superObj = new Super();

Sub.prototype= superObj;

var subObj = new Sub();

alert(subObj.superName);
subはsuperのsuper Objのインスタンスを継承し、javascriptオブジェクトには三つのエンティティが存在し、一つはSuper、Subなどの定義されたクラスであり、ブラウザはクラスを実現するタイミングで自動的にクラス天上prototypeの属性となり、この属性は対応する別のエンティティprototypeを指すことが分かる.
prorotype本体には二つの隠しポインタがあります.一つはコンストラで、対応するクラスの中のコンストラクションを指します.proto_,それはjavascriptの中のトップクラスの父の対象Objを指して、いくつかの共通の方法を受け継いで、例えばisProttypeOf
第3のエンティティは、オブジェクト、例えばsuperObjとsubObjであり、そこにはポインタが隠れています.proto_,指向類に対応するプロトタイプ
プロトタイプチェーンの発生とは、Sub.prototype=superObjのためです.私たちは一つの種類の原型を一つの対象に修正します.プロト.もう一つのプロトタイプを指しました.このプロトタイプも一つの対象かもしれません.また対応するプロトタイプを指しています.このままでは最後まで、一つのプロトタイプを修正したと思わない対象があります.プロト.デフォルトはObjを指しています.これは完全なプロトタイプチェーンです.
上のコードの中のプロトタイプチェーンを描きます.
                                                            デフォルトのprototypeの中の_uプロト.全部Objを指します
                                                      Obj<-----------------------------------------------------------------------|                           
                                                                                                                                                                                |
                                               superObjオブジェクトの中の_uプロト.ポインタ                                                                     |
                          スーパー          |---------------------------------------->prototype(Superデフォルトのプロトタイプ)--------|
  ---------------->superObj----
  |     | prototype書き換え
  |     |
  |     -----------Sub                                                                          prototype(Subデフォルトの原型は使用されていません)
  -----------------subObj
点線部分はプロトタイプチェーンで、興味のある方は関係を引き継ぐことができます.