継承は、ほとんどの話の一つで概念のオブジェクト指向言語です。ECMAScriptのサポート実装の継承、継承は限り達成するためのプロトタイプチェーンとしてオンになっている
・プロトタイプチェーンを
基本的な考え方は、参照型は参照プロパティとメソッドの別のタイプから継承するためにプロトタイプを使用することです。
コンストラクタとの間の関係の簡単なレビュー、およびプロトタイプの例:各コンストラクタは、プロトタイプオブジェクトを有する、プロトタイプオブジェクトは、コンストラクタを指すポインタを含む、例えば、指示物体のプロトタイプ含む
内部ポインタ。だから、私たちはプロトタイプオブジェクトは、タイプの別のインスタンスに等しいと仮定しましょう、その結果はどうなりますか?
// 生物コンストラクタ 関数バイオ(){ この生命= trueに } Bio.prototype.getLife = 関数(){ 戻り 、この生命; } // コンストラクタ動物 関数動物(){ この .eatを= trueに、 } Animal.prototype = 新しい新しいバイオ(); // イヌコンストラクタ 関数犬(マスター){ この管理組織のビー玉=マスター。 } Dog.prototype = 新しい新しい動物(); VARの DOG1 = 新しい新しい犬( "CL" ) はconsole.log(dog1.life); // trueに はconsole.log(dog1.constructor); / * 出力: ƒバイオ() { this.life = trueに } なぜ、動物犬とのためのコンストラクタを書き換えることが理由の * /
上記のコード。私たちは、デフォルトで提供犬のプロトタイプを使用していないが、それは新しいプロトタイプに変更しました。この新しいプロトタイプは、動物の一例です。そうではないだけで、新たな動物のプロトタイプとして
...動物のプロトタイプへのポインタであり、すべてのプロパティとインスタンス所有者の方法、およびその内部
基本的にこの章で前述した検索メカニズムのプロトタイプを拡大し、プロトタイプチェーンを実装することによって。
デフォルトのプロトタイプ:
実際には、前の例では、いくつかのプロトタイプチェーンリングを示します。我々は、すべての種類のアプリケーションは、デフォルトのオブジェクトによって継承されていることを知って、これは達成するために、プロトタイプチェーンを通じて継承されます。我々は、すべての参照型の覚え
Objectプロトタイプの既定のインスタンスを、そのデフォルトのプロトタイプは、内部ポインタのObject.prototypeが含まれます。これは、すべてのカスタムタイプが継承されるのtoString()、のvalueOf()および他のある
理由のデフォルトの方法。
プロトタイプの実施例との関係を確認するには:
決定し、2つの方法の試作例と関係することができます。
// 最初の方法:この実施例の結果とプロトタイプオペレータ検出鎖限りはinstanceof演算子コンストラクタ登場として、それがtrueを返し,,。 console.log(DOG1 instanceofは犬); はconsole.log(DOG1 instanceofの動物); はconsole.log(DOG1 instanceofはバイオ); はconsole.log(DOG1 のinstanceofオブジェクト); // trueに全て // なぜならプロトタイプチェーンの、我々上記の例は、タイプのDOG1任意の4であると言うことができる // isPrototypeOf()メソッドを使用して:第二の方法。同様に、限り、プロトタイプチェーンは、プロトタイプが登場ように、プロトタイプは、プロトタイプ鎖由来のインスタンスといえる 。はconsole.log(Object.prototype.isPrototypeOf(DOG1)) はconsole.log(Animal.prototype.isPrototypeOf(DOG1)) ; はconsole.log(Bio.prototype.isPrototypeOf(DOG1)) ; console.log(Dog.prototype.isPrototypeOf(DOG1)); // すべての真
慎重な定義方法
二つの質問:
1:とにかく、コードのプロトタイプのメソッドを追加するために交換用のプロトタイプ文の後に配置する必要があります
2:プロトタイプチェーンを継承によって達成する場合には、プロトタイプのメソッドを作成することはできませんがオブジェクトリテラル使用しています。やっているのでそのプロトタイプチェーン書き換えるだろう
問題のプロトタイプチェーンを:
コードを..
機能スーパー(){ この .color = [ "赤"、 "青"、 "緑" ]。 } 関数サブ(){ } Sub.prototype = 新しいスーパー()。 VaRの INS1 = 新しいサブ(); ins1.color.push( "黒" )。 console.log(ins1.color)。 // [ "赤"、 "青"、 "緑"、 "黒"] のvar INS2 = 新しいサブ()。 console.log(ins2.color)。 // [ "赤"、 "青"、 "緑"、「 すべてのインスタンスは、カラー属性のこのサブを共有しますので、そこで問題は、ある、そして我々はins2.colorにより反射ins1.colorするために変更することができます // 質問:私は、サブタイプのインスタンスを作成すると、のスーパータイプに構築することができませんパラメータを渡すように機能します。実際には、スーパーのタイプに、すべてのオブジェクトインスタンスに影響を与えることなく、中に方法はありません指摘しておかなければ // コンストラクタパスパラメータが。そこで、実際にはめったにだけではプロトタイプチェーンを使用していません