この方法は、著者によるオリジナルではありません。前任者に基づいて要約したところ、簡潔で実用的なJavaScript継承方法を思いつきました。
従来のJavaScriptは、プロトタイプに基づいてプロトタイプチェーンを継承し、多くの新しい操作が必要です。コードは十分に簡潔ではなく、読みやすさはそれほど強くなく、プロトタイプチェーンによって簡単に汚染されるようです。
著者によって要約された継承方法は簡潔で明確です。それは最良の方法ではありませんが、読者を刺激できることを願っています。
さて、あまりナンセンスを言わないでください、コードを見てください、コメントは詳細です、あなたは一見理解することができます~~~
コードコピーは次のとおりです。
/**
* Yang Yuanon 14-11-11によって作成されました。
*プロトタイプを使用して継承を実装しないでください
*
*/
/**
* JavaScriptオブジェクトのコピー、1つのレイヤーのみをコピーし、機能属性のみをコピーするだけでなく、普遍的ではありません!
* @param objオブジェクトをコピーします
* @returnsオブジェクト
*/
object.prototype.clone = function(){
var _s =これ、
newobj = {};
_s.each(function(key、value){
if(object.prototype.tostring.call(value)=== "[object function]"){
newobj [key] = value;
}
});
Newobjを返します。
};
/**
*独自のプロパティをすべて繰り返します
*
* @paramコールバックコールバック関数。コールバックには2つのパラメーターが含まれます:キー属性名と値属性値
*/
object.prototype.each = function(callback){
var key = ""、
_this = this;
for(_thisのキー){
if(object.prototype.hasownproperty.call(_this、key)){
callback(key、_this [key]);
}
}
};
/**
*サブクラスを作成します
* @param ext objには、書き換えまたは拡張する必要がある方法が含まれています。
* @returnsオブジェクト
*/
object.prototype.extend = function(ext){
var child = this.clone();
ext.each(function(key、value){
child [key] = value;
});
子供を返します。
};
/**
*オブジェクトを作成する(インスタンス)
* @paramの引数は、コンストラクターパラメーターのリストとして任意の数のパラメーターを受け入れることができます
* @returnsオブジェクト
*/
object.prototype.create = function(){
var obj = this.clone();
if(obj.construct){
obj.construct.apply(obj、arguments);
}
OBJを返します。
};
/**
*使用例
*この方法を使用して、退屈なプロトタイプを避けて継承します。
*ただし、私が書いた例は、親クラスの関数のみを継承することができます(メンバー方法として理解できます)。
*よりリッチなコンテンツを継承したい場合は、クローン法を改善してください。
*
*
*/
/**
*動物(親)
* @type {{construct:construct、eat:eat}}
*/
var Animal = {
構成:function(name){
this.name = name;
}、
EAT:function(){
console.log( "私の名前は"+this.name+"。食べることができます!");
}
};
/**
*鳥(サブクラス)
*鳥は親クラスのイート方法をオーバーライドし、フライメソッドを拡張します
* @type {subclass | void}
*/
var bird = animal.extend({
食べる:function(food){
console.log( "私の名前は"+this.name+"。私は食べられます"+food+"!");
}、
fly:function(){
console.log( "私は飛ぶことができます!");
}
});
/**
*鳥のインスタンスを作成します
* @type {jim}
*/
var birdjim = bird.create( "jim")、
birdtom = bird.create( "Tom");
birdjim.eat( "worm"); //私の名前はジムです。ワームが食べられます!
Birdjim.fly(); //私は飛べる!
birdtom.eat( "rice"); //私の名前はトムです。ご飯が食べられます!
birdtom.fly(); //私は飛べる!