JavaScript 継承の使用法分析_js オブジェクト指向

WBOY
リリース: 2016-05-16 18:06:43
オリジナル
1006 人が閲覧しました

JavaScript の継承について詳しく学ぶ前に、まず次の概念を理解してください:
親クラス: 継承されたクラス
サブクラス: 継承されたクラス
スーパー クラス: つまり、親クラス
抽象クラス: A通常はインスタンス化に使用されないクラス。その目的は他のクラスから継承することです。
基底クラス: 他のクラスが継承できるクラス
派生クラス: 基底クラスから継承されるクラス

JavaScript オブジェクトの継承には通常、次の 5 つのメソッドがあります:
1. オブジェクトの偽装
2. call() メソッド
3. apply() メソッド
4. プロトタイプ チェーン
5.混合メソッド

A. オブジェクトの偽装
いわゆるオブジェクトの偽装とは、継承の目的を達成するために、新しいクラスが古いクラスを偽装することです (古いクラスはコンストラクター メソッドを使用する必要があります)。例 .1

コードをコピー コードは次のとおりです:
function people(name,sex) ,age){ // コンストラクター メソッドを使用します。
this.name=name;
this.say=function(){
alert(" 私の名前は "
};

this.doing=function(){
alert("私は話しています");
}
var Marry=new people("Marry","Woman","23");
Marry.doing(); White_people(名前, 性別, 年齢){
this.inherit=people;
this.inherit を削除

this.area= function(){
alert("私はヨーロッパにいます");
}
}
var Tom=newwhite_people("トム","男","21"); Tom.say( );
Tom.area();
alert(Tom.age);


上記の例では、people がwhite_people の基本クラスとして使用されていることに注意してください。形式は
this.inherit=people で、継承を実現するためにオブジェクトの偽装に使用されます。 //Inherit
delete this.inherit; /継承の削除
親クラスの関連する属性とメソッドの上書きを避けるために、すべての新しい属性と新しいメソッドを削除する必要があります。
さらに、オブジェクトの偽装は多重継承をサポートします。 2



コードをコピーします


コードは次のとおりです。


function worker(pay,work){
this.pay= pay;
this.work=work; function city_worker(name,sex,age,pay,work){ this.inherit=people; >this.inherit(名前、性別、年齢); this.inherit; this.inherit(pay,work);継承; }
var Jerry=new city_worker("Jerry","man","21","$1000","coder"); >alert(Jerry.work) ;


オブジェクトの偽装には欠点があります。多重継承メカニズムが実装されている場合、基本クラスが同じ属性またはメソッドを持つ場合、後続のクラスから継承されてしまいます。 .

B.call () メソッド
は、カプセル化されたオブジェクトによって偽装された単なる関数です。このように、「古典的な」 3 つの文を記述する必要はなくなり、次の文に置き換えます。文:
Base class.call(object,parameters List)
eg.1




コードをコピー


コードは次のとおりです

function farmer(name,sex,age,pay,work){
people.call(this,name,sex,age);
worker.call(this) ,pay,work);
}

var Nicholas=new farmer("Nicholas","man","27","$3000","irrigator"); );
alert(Nicholas.pay);
同様に、call() には、同じ名前のプロパティとメソッドに関する小さな問題があります。メソッド call() と同じです。apply() もオブジェクト偽装のラッパー関数です。形式は次のとおりです: base class.apply(object,parameter array);
コードをコピー


コードは次のとおりです:


function White_collar(name,sex,age,pay,work) ){
people.apply(this,new Array(name,sex,age));
worker.apply(this,[pay,work]);

var Jiessie =newwhite_collar("Jiessie","女性","26","$2500","editor");
Jiessie.say()
alert(Jiessie.work);
同様に、apply() には同じ名前のプロパティとメソッドに関する小さな問題があります。

D. プロトタイプ チェーン
同様に、上記の 3 つのメソッドはすべてコンストラクターの形式で継承を使用します。
eg.1
コードをコピー コードは次のとおりです。 :

function blue_collar(){
}
blue_collar.prototype.name="ジーン";
blue_collar.prototype.age="33";プロトタイプ.say=function(){
alert("私の名前は "
);

function city_blue_collar(){
}
city_blue_collar.prototype=新しいブルーカラー();

var jj=新しいシティ_ブルー_カラー

;
The prototype chain also has the disadvantages of the prototype chain: parameters cannot be passed. In addition, the prototype chain does not support multiple inheritance, because

E. Mixed method
uses the constructor method to write the attributes of the class, For inheritance of attributes, use call() or apply()
Use prototype method to write methods, for inheritance of methods, use prototype chain
eg.1
Copy code The code is as follows:

function beauty(name,age){
this.name=name;
this.age=age;
}
beauty.prototype.say=function(){
alert("Little girl's name" this.name);
};

function china_beauty(name,age,area ){
beauty.call(this,name,age);
this.area=area;
}
china_beauty.prototype=new beauty();
china_beauty.prototype.from= function(){
alert("I am from" this.area);
};

var diaochan=new china_beauty("Diao Chan","16","Lintao");
diaochan.say();
diaochan.from();
alert(diaochan.age);
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート