javascript prototypeプロトタイプチェーンを深く分析します.
2158 ワード
対象に向けたjavascriptプログラミングでは、オブジェクトインスタンスのある属性にアクセスすると、まずこのオブジェクトの中から探します.もし存在しないなら、対象の原型の中から探します.もしまだ存在しないなら、それに沿って探します.
プロトタイプチェーンを上に探してみます.ここのプロトタイプチェーンは具体的にどのような形ですか?
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
点線部分はプロトタイプチェーンで、興味のある方は関係を引き継ぐことができます.
プロトタイプチェーンを上に探してみます.ここのプロトタイプチェーンは具体的にどのような形ですか?
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
点線部分はプロトタイプチェーンで、興味のある方は関係を引き継ぐことができます.