継承モード(下)
2826 ワード
Javascript継承モード(下)
聖杯モード
前の文章では、原型を共有した上で、自分で原型を修正しても、この原型を使用した他の構造関数に影響しないと述べました.
しかし,プロトタイプを修正すると,このプロトタイプを用いたコンストラクタには影響しない.
例えば、
各プロトタイプにはコンストラクタがあります.コンストラクタのシステムには属性があります.
じゃ、問題が来ました.今のsonの構造関数は何ですか?
ソソンの構造関数は
しかし、son.com nstructorの出力は
Why
分析:
コントローラーはプロトタイプにしかない属性で、対象にはコントローラーという属性がないので、探しているコントローラーはプロトタイプのものです.
ソニーの原型はnew Lk()->new Lk()を対象にしていますが、中にはconstructorがありませんので、new Lk()の原型を探しています.
だから最後に、sonの構造関数はFatherの中のconstructorを探しています.だから、son.com nstructorが出力したのは
聖杯モードを完璧にしたいです.
sonのコンストラクタは
拡張(あってもなくても良い):
自分が作成したオブジェクトが自分のクラス(最終的に原型を継承)を見つけることができることを望んでいます.
ヤフーYUI 3庫にはパッケージ機能の良いinheitがあり、非常に高い継承モデルです.
この操作を推奨します.
聖杯モード
前の文章では、原型を共有した上で、自分で原型を修正しても、この原型を使用した他の構造関数に影響しないと述べました.
Father.prototype.lastName = ' ';
function Father() {
}
function Son () {
}
function inherit(Target, Origin) {
function Lk() {};
Lk.prototype = Origin.prototype;
Target.prototype = new Lk();
}
inherit(Son, Father);//
var son = new Son();
var father = new Father();//
このときのSonのプロトタイプは継承されたFatherのプロトタイプであるため、制御セット動作Son.prototype
が出力するのはFather{…}である.しかし,プロトタイプを修正すると,このプロトタイプを用いたコンストラクタには影響しない.
例えば、
Son.prototype.name = demo;
は次にソン.nameの値を出力します.出力fatherの値はundefinedです.他のコンストラクタに影響を与えません.各プロトタイプにはコンストラクタがあります.コンストラクタのシステムには属性があります.
じゃ、問題が来ました.今のsonの構造関数は何ですか?
ソソンの構造関数は
function Son () { }
であるべきです.しかし、son.com nstructorの出力は
function Father () {}
です.Why
分析:
コントローラーはプロトタイプにしかない属性で、対象にはコントローラーという属性がないので、探しているコントローラーはプロトタイプのものです.
ソニーの原型はnew Lk()->new Lk()を対象にしていますが、中にはconstructorがありませんので、new Lk()の原型を探しています.
だから最後に、sonの構造関数はFatherの中のconstructorを探しています.だから、son.com nstructorが出力したのは
function Father () {}
So.聖杯モードを完璧にしたいです.
sonのコンストラクタは
function Son () { }
であるべきです.それを変えたいです.
Father.prototype.lastName = ' ';
function Father() {
}
function Son () {
}
function inherit(Target, Origin) {
function Lk() {};
Lk.prototype = Origin.prototype;
Target.prototype = new Lk();
Target.prototype.constructor = Target;//
Target.prototype.uber = Origin.prototype;//
}
inherit(Son, Father);//
var son = new Son();
var father = new Father();//
このときSonのコンストラクタは自分自身に変更されました.コンソール操作son.com nstructorの出力はfunction Son () { }
です.拡張(あってもなくても良い):
自分が作成したオブジェクトが自分のクラス(最終的に原型を継承)を見つけることができることを望んでいます.
Target.prototype.uber = Origin.prototype;
以下は聖杯モードの最終的な形式です.この方法を直接呼んで参参してもいいです. function inherit(Target, Origin) {
function Lk() {};
Lk.prototype = Origin.prototype;
Target.prototype = new Lk();
Target.prototype.constructor = Target;//
Target.prototype.uber = Origin.prototype;//
}
本節のポイント:ヤフーYUI 3庫にはパッケージ機能の良いinheitがあり、非常に高い継承モデルです.
この操作を推奨します.
var inherit = (function () {
var Lk = function () {};// 。
return function (Target, Origin) {// var Lk = function(){} , inherit
Lk.prototype = Origin.prototype;
Target.prototype = new Lk();
Target.prototype.constructor = Target;
Target.prototype.uber = Origin.prototype;
}
}());
inherit(Son, Father); // inherit。