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 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 つの方法だけではありません。コメントや追加は大歓迎です!~