JSでは、クラスの概念がないことを知っています。クラスのすべてのインスタンスオブジェクトは、同じプロトタイプオブジェクトから属性を継承するため、プロトタイプオブジェクトはクラスのコアです。
クラスはオブジェクトの抽象化であり、オブジェクトはクラスの具体的なインスタンスです。クラスは抽象的であり、メモリを占有しませんが、オブジェクトはコンクリートでストレージスペースを占有します。 --- Baidu Encyclopedia
初期のJavaScript要件は非常に単純で、基本的に機能として書かれており、その後にプロセス指向のライティングが続きました。その後、オブジェクト指向の開発のアイデアが徐々に導入され、その後ゆっくりとクラスに書き込まれました。
JSでは、クラスに書き込む本質は基本的にコンストラクター +プロトタイプです。以下では、JSクラスを書くためのいくつかの方法について説明しましょう。
コンストラクターメソッド
/*** iners class:名前属性とgetNameメソッドを備えた人を定義します*/<script> function person(name){this.name = name; this.getName = function(){return this.name; }} //ここにいくつかのオブジェクトをインスタンス化しますvar p1 = new person( "trigkit4"); var p2 = new person( "Mike"); console.log(p1 instanceof person); // true console.log(p2 instanceof person); // true </script>上記のコンソール出力から、P1とP2が実際に人クラスのインスタンスオブジェクトであることがわかります。オペレーターのインスタンスの左側には、検出されるクラスのオブジェクトがあり、右側にはクラスを定義するクラスのコンストラクターがあります。ここでは、InstanceOFを使用して、オブジェクトP1が人クラスに属しているかどうかを検出します。
この方法の利点は、パラメーターに従って異なるオブジェクトインスタンスを構築できることです。欠点は、インスタンスオブジェクトを構築するたびに、getNameメソッドが生成され、メモリ廃棄物が生成されることです。
各オブジェクトが同じ方法を共有できるように、クラスメソッドの代わりに外部関数を使用できます。書き換えられたクラスは次のとおりです。
//外部関数<script>関数getName(){return this.name; } function person(name){this.name = name; this.getName = getName; //} </script>プロトタイプメソッド
<script> function person(){}; person.prototype.name = "trigkit4"; //クラスのプロパティはプロトタイプに配置されますperson.prototype.getname = function(){return "im" + this.name; } var p1 = new person(); var p2 = new person(); console.log(p1.name); // trigkit4 console.log(p2.getname()); //私はtrigkit4 </script>ですプロトタイプメソッドの欠点は、オブジェクトインスタンスをパラメーターで構築できないことです(通常、各オブジェクトのプロパティは異なります)。利点は、すべてのオブジェクトインスタンスがgetNameメソッド(コンストラクターメソッドと比較して)を共有し、メモリ廃棄物がないことです。
コンストラクター +プロトタイプ
最初の2つの利点を取ります:
a。コンストラクターを使用して、クラス属性(フィールド)を定義します。
b。プロトタイプを使用して、クラスの方法を定義します。
<script> function person(name){this.name = name; } //プロトタイプ機能を使用すると、オブジェクトインスタンスがgetNameメソッドperson.prototype.getname = function(){return "im" + this.name; } </script>このようにして、異なる属性を持つオブジェクトを構築し、オブジェクトインスタンスがメモリ無駄を引き起こすことなくメソッドを共有できるようにすることができます。
JSコードをよりコンパクトにするために、プロトタイプメソッドコードを機能担当者のブレースに移動しました。
<script> function person(name){this.name = name; person.prototype.getName = function(){return name; // this.nameは適切ではありません}} var p1 = new person( 'trigkit4'); console.log(p1.getname()); // trigkit4 </script>ここでは、上記のコンストラクターに加えて、クラスを定義するためのいくつかの方法を知る必要があります。
object.create()メソッド
この方法では、「クラス」は機能ではなくオブジェクトです。
var person = {name: "trigkit4"、age:21、run:function(){alert( "i like ling running"); }}次に、object.create()を直接使用して、newを使用せずにインスタンスを生成します。
var p1 = object.create(person); alert(p1.age); // 21 p1.run(); //ランニングが好きです
この方法は「コンストラクターメソッド」よりも簡単ですが、プライベート属性やプライベートメソッドを実装することはできず、インスタンスオブジェクト間でデータを共有できないため、「クラス」のシミュレーションは十分に包括的ではありません。
createNew()メソッド
この方法では、これとプロトタイプは必要ありません。オブジェクトを使用してクラスをシミュレートし、クラス内のコンストラクターcreateNew()を定義し、createNew()のインスタンスオブジェクトを定義し、このインスタンスオブジェクトを返信値として使用します。
<script> var person = {createNew:function(){var person = {}; person.name = "trigkit4"; person.run = function(){alert( "私は走るのが好きです"); };返品者; }} </script>使用するときは、createNew()メソッドを呼び出してインスタンスオブジェクトを取得します。
var p1 = person.createNew(); p1.run(); //ランニングが好きです
この書き込み方法は、実際にはオブジェクトリテラルの執筆方法に非常に似ていますが、1つはコンマで区切られており、もう1つはセミコロンで分離されています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。