この記事では、JavaScriptのクラスとインスタンスの実装方法について説明します。参照のためにそれを共有してください。詳細は次のとおりです。
JavaScriptには、親クラス、チャイルドクラス、クラスとインスタンスの概念はありません。それはすべて、相続を達成するためにプロトタイプチェーンに依存します。オブジェクトのプロパティを探すとき、JavaScriptは、対応するプロパティが見つかるまでプロトタイプチェーンを上方に通過します。 JavaScriptにクラスとインスタンスの概念をシミュレートできるようにするいくつかの方法があります。
1.コンストラクターを直接使用してオブジェクトを作成し、これを使用してコンストラクター内のオブジェクトインスタンスを参照します。
次のようにコードをコピーします:function animal(){
this.name = "animal";
}
animal.prototype.makesound = function(){
console.log( "Animal Sound");
}
[関数]
var Animal1 = new Animal();
Animal1.name;
'動物'
Animal1.makesound();
動物の音
別の例を見てみましょう:
次のようにコードをコピーします:function point(x、y){
this.x = x;
this.y = y;
}
point.prototype = {
方法1:function(){console.log( "method1"); }、
方法2:function(){console.log( "method2"); }、
}
{method1:[function]、method2:[function]}
var point1 = new Point(10、20);
point1.method1();
方法1
point1.method2();
方法2
上記のように、最初にコンストラクターオブジェクトのプロトタイプ属性を指定します。次に、オブジェクトの新しいインスタンスで、プロトタイプで指定されたメソッドを呼び出すことができます。
2。Object.create()メソッドを使用して、オブジェクトを作成します
次のようにコードをコピーします:var animal = {
名前:「動物」、
makeound:function(){console.log( "Animal Sound"); }、
}
var animal2 = object.create(animal);
Animal2.Name;
'動物'
console.log(animal2.name);
動物
Animal2.makesound();
動物の音
この方法はコンストラクターの方法よりも単純ですが、プライベート属性やプライベートメソッドを実装することはできず、インスタンスオブジェクト間でデータを共有できないため、クラスのシミュレーションはまだ十分に包括的ではありません。
3.オランダのプログラマーGabor de Mooijによって提案されたミニマリストのアプローチ。推奨される使用法。
次のようにコードをコピーします:var animal = {
init:function(){
var Animal = {};
animal.name = "animal";
Animal.makesound = function(){console.log( "Animal Sound"); };
動物を返します。
}
};
var animal3 = animal.init();
Animal3.name;
'動物'
animal3.makesound();
動物の音
プロトタイプとこれを使用せずに、コンストラクターinitをカスタマイズするだけです。継承された実装も非常に簡単です。
次のようにコードをコピーします:var cat = {
init:function(){
var cat = animal.init();
cat.name2 = "cat";
cat.makesound = function(){console.log( "cat sound"); };
cat.sleep = function(){console.log( "Cat Sleep"); };
猫を返します。
}
}
var cat = cat.init();
cat.name; // '動物'
cat.name2; // '猫'
cat.makesound(); //メソッドオーバーロードと同様
猫の音
cat.sleep();
猫の眠り
私有地とプライベート方法の使用:
次のようにコードをコピーします:var animal = {
init:function(){
var Animal = {};
var sound = "private Animal Sound"; //プライベート属性
Animal.makesound = function(){console.log(sound); };
動物を返します。
}
};
var animal4 = animal.init();
animal.sound; //未定義のプライベート属性は、オブジェクトの独自のメソッドを読むことができます。
animal.sound; //未定義のプライベート属性は、オブジェクトの独自のメソッドを通してのみ読み取ることができます。
Animal4.makesound();
プライベートな動物の音
動物のオブジェクトで定義されていないプロパティと方法がプライベートである限り、外の世界でアクセスすることはできません。
クラスとインスタンスの間でデータ共有を実現できます。
次のようにコードをコピーします:var animal = {
音:「一般的な動物の音」、
init:function(){
var Animal = {};
Animal.commonsound = function(){console.log(animal.sound); };
Animal.Changesound = function(){animal.sound = "Common Animal Soundが変更されました"; };
動物を返します。
}
}
var animal5 = animal.init();
var animal6 = animal.init();
animal.sound; //クラス属性と見なすことができます
「一般的な動物の音」
Animal5.Sound; //インスタンスオブジェクトはクラス属性にアクセスできません
未定義
Animal6.sound;
未定義
animal5.commonsound();
一般的な動物の音
Animal6.commonsound();
一般的な動物の音
Animal5.Changesound(); //クラスプロパティを変更します
未定義
animal.sound;
「一般的な動物の音」
animal5.commonsound();
一般的な動物の音
Animal6.commonsound();
一般的な動物の音
たとえば、Animal.Soundはクラスとインスタンスの共有属性であり、クラス属性およびクラスの方法と見なすことができます。
インスタンスが共通属性を変更すると、クラスおよびその他のインスタンスの共通属性もそれに応じて変更されます。
要約すると、それはJavaScriptでシミュレートされたクラスとインスタンスの概念と使用法です。
この記事がみんなのJavaScriptプログラミングに役立つことを願っています。