ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptのオブジェクト指向継承メソッドの古典的な実装_基礎知識

JavaScriptのオブジェクト指向継承メソッドの古典的な実装_基礎知識

WBOY
WBOYオリジナル
2016-05-16 17:24:57926ブラウズ

JavaScript は 20 年近く前から存在していますが、この予言については依然としてさまざまな意見があります。多くの人は、JavaScript をオブジェクト指向プログラミング言語とは見なすことができないと言います。しかし、JavaScript は非常に緩やかに型付けされており、コンパイラがありません。これにより、プログラマーには大きな自由が与えられますが、いくつかの欠点も生じます。

JavaScript はオブジェクト指向言語ではありませんが。しかし、他の言語がオブジェクト指向プログラミングを実装する方法を模倣することで、JavaScript のオブジェクト指向プログラミングを実装できます。

以下は、JavaScript チュートリアルにおける非常に古典的な継承メソッドです。

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

// ペット オブジェクトを定義します。これに名前と脚の数を渡します。
var Pet = function (name,legs) {
this.name = name;
this.legs = feet; >//ペットの名前と足の数を表示するメソッドを作成します。
Pet.prototype.getDetails = function () {
return this.name " has " this.legs " feet ";
}

//Pet から継承した Cat オブジェクトを定義します。
var Cat = function (name) {
Pet.call(this,name,4) //この親オブジェクトのコンストラクタを呼び出します

//この行の実装ペットから受け継いだもの。
Cat.prototype = new Pet();

// 猫のアクション メソッドを追加します
Cat.prototype.action = function () {
return "鳥を捕まえる"; 🎜>};

//猫のインスタンス petCat を作成します。
var petCat = new Cat("felix");

var 詳細 = petCat.getDetails();
console.log(details) //「フェリックスには 4 本の足があります」
var action = petCat.action();
console.log(action) //「鳥を捕まえる」。
petCat.name = "sylvester" //petCat の名前を変更します
petCat.legs = 7 ; //petCat の脚の数を変更します
details = petCat.getDetails();
console.log(details) //「シルベスターは 7 脚」ですが、


メソッド 実行には大きな問題はありませんが、コード全体のスタイルは少し肥大化しており、あまりエレガントではありません。プロパティは引き続き外部で変更できます。このアプローチでは、継承されたプロパティは保護されません。以下のメソッドはnewとprototypeを省略し、「関数継承」の機能を利用して実装しています。



コードをコピー
コードは次のとおりです: // ペット オブジェクトを定義します。これに名前と脚の数を渡します。 var pet = function (name,legs) { //名前は変更できるが脚の数は変更できないオブジェクトを作成し、変数のプライベート化を実現します。
var that = {
name : name,
getDetails : function () {
return that.name " has " 脚 " 脚 "
}
;
return that;
}

//pet から継承した cat オブジェクトを定義します。
var cat = function (name) {
var that = pet(name,4); //pet から属性を継承

//cat にアクションを追加するメソッド。
that.action = function () {
return "鳥を捕まえる"
}

return that

}

//作成a petCat2;
var petCat2 = cat("Felix");

var 詳細 = petCat2.getDetails(); //「フェリックスには 4 本の足があります」 🎜>var action = petCat2.action();
console.log(action) //「鳥を捕まえる」。
petCat2.name = "sylvester"; //名前は変更できます。
petCat2.legs = 7; //ただし、脚の数は変更できません
details = petCat2.getDetails();
console.log(details) //「シルベスターには 4 つの脚があります」


注意: プロトタイプ継承を使用する利点は、何度継承しても、オブジェクトのプロトタイプのプロパティとメソッドが保存されるのは 1 回だけであることです。関数が継承されると、新しいインスタンスごとに重複したプロパティとメソッドが作成されます。大きなオブジェクトを多数作成すると、メモリの消費量が非常に多くなります。解決策は、より大きなプロパティまたはメソッドをオブジェクトに保存し、それをパラメーターとしてコンストラクターに渡すことです。この方法では、すべてのインスタンスが独自のバージョンを作成する代わりに 1 つのオブジェクト リソースを使用します。

上記の 2 つのメソッドはいずれも、JavaScript オブジェクト指向の継承を簡単に実装できます。絶対に良いメソッドも、絶対に悪いメソッドもありません。個人の好みによります。これら 2 つの方法だけではありません。コメントや追加は大歓迎です!~
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。