JavaScript はオブジェクトベースであり、あらゆる要素をオブジェクトとみなすことができます。ただし、種類とオブジェクトは異なります。この記事では、型とオブジェクトのいくつかの特性について説明することに加えて、より重要なこととして、適切で再利用可能な型を作成する方法を学びます。結局のところ、人気のあるスクリプト言語である JavaScript を適切にカプセル化して巨大なタイプ ライブラリを形成できれば、再利用する上で非常に意味のあるものになります。
インターネット上にはプロトタイプに関する記事がたくさんありますが、核となるアイデアはまったく理解できませんでした。サンプル コードをたくさん書いた後、最終的に、プロトタイプは型でのみ使用できることに気付きました。
以下に、型とオブジェクトに関するいくつかの例を示します。これらの例を読むと、型とオブジェクトの関係が理解しやすくなるでしょう。
コード例 | 説明する | |
1 | オブジェクト.プロトタイプ.プロパティ = 1; Object.prototype.Method = function (){alert(1);}var obj = new Object();alert(obj.Property);obj.Method(); | 型にプロトタイプを使用して、型に動作を追加できます。これらの動作は、その型のインスタンスでのみ明示されます。 JS で許可される型は、配列、ブール、日付、列挙子、エラー、関数、数値、オブジェクト、正規表現、文字列です。 |
2 | var obj = 新しいオブジェクト(); obj.prototype.Property = 1;//エラー//エラーobj.prototype.Method = function(){alert(1);} | インスタンスでプロトタイプを使用することはできません。使用しないと、コンパイル エラーが発生します。 |
3 | Object.Property = 1;Object.Method = function(){alert(1);}alert(Object.Property);Object.Method(); | 型の「静的」プロパティとメソッドを定義し、それらを型上で直接呼び出すことができます。 |
4 | Object.Property = 1;Object.Method = function(){alert(1);}var obj = new Object();alert(obj.Property);//Errorobj.Method();//エラー | インスタンスは、型の静的プロパティまたはメソッドを呼び出すことはできません。呼び出すと、オブジェクト未定義エラーが発生します。 |
5 | function Aclass(){this.Property = 1;this.Method = function(){alert(1);}}var obj = new Aclass();alert(obj.Property);obj.Method(); | この例は、JavaScript で型を定義する通常の方法を示しています。 |
6 | function Aclass(){this.Property = 1;this.Method = function(){alert(1);}}Aclass.prototype.Property2 = 2;Aclass.prototype.Method2 = function{alert(2);}var obj = 新しい Aclass();alert(obj.Property2);obj.Method2(); | プロトタイプを外部で使用して、カスタム タイプにプロパティとメソッドを追加できます。 |
7 | function Aclass(){this.Property = 1;this.Method = function(){alert(1);}}Aclass.prototype.Property = 2;Aclass.prototype.Method = function{alert(2);}var obj = 新しい Aclass();alert(obj.Property);obj.Method(); | カスタム型のプロパティまたはメソッドは、プロトタイプを通じて外部から変更することはできません。この例からわかるように、呼び出されるプロパティとメソッドは依然として初期定義の結果です。 |
8 | function Aclass(){this.Property = 1;this.Method = function(){alert(1);}}var obj = new Aclass();obj.Property = 2;obj.Method = function(){alert( 2);}alert(obj.Property);obj.Method(); | オブジェクトのプロパティは変更できます。 (これは確かです) オブジェクトのメソッドを変更することもできます。 (一般的なオブジェクト指向の概念とは異なります) |
9 | function Aclass(){this.Property = 1;this.Method = function(){alert(1);}}var obj = new Aclass();obj.Property2 = 2;obj.Method2 = function(){alert( 2);}alert(obj.Property2);obj.Method2(); | オブジェクトにプロパティまたはメソッドを追加できます |
10 | function AClass(){ this.Property = 1; this.Method = function() {alert(1); }}function AClass2(){ this.Property2 = 2; this.Method2 = function(); }}AClass2.prototype = 新しい AClass();var obj = 新しいAClass2();alert(obj.Property);obj.Method();alert(obj.Property2);obj.Method2(); | この例は、ある型が別の型を継承する方法を示しています。 |
11 | function AClass(){ this.Property = 1; this.Method = function() {alert(1); }}function AClass2(){ this.Property2 = 2; this.Method2 = function(); }}AClass2.prototype = 新しい AClass();AClass2.prototype.Property = 3;AClass2.prototype.Method = function(){ alert(4);}var obj = new AClass2();alert(obj.Property);obj.Method(); | この例は、サブクラスが親クラスのプロパティまたはメソッドをオーバーライドする方法を示しています。 |
・例2:プロトタイプの使用制限
・例3: 型に静的メンバーを定義する方法
・例7: 再定義型のメンバに対するプロトタイプの制限
・例10: ある型を別の型から継承させる方法
・例11: 親クラスのメンバをサブクラスで再定義する方法
JavaScript で実装できるオブジェクト指向の機能には次のものがあります。
・パブリックフィールド
・パブリックメソッド
・プライベートフィールド
・プライベートメソッド(プライベートフィールド)
・メソッドのオーバーロード
・コンストラクタ
・イベント
・単一継承
・サブクラスが親クラスの属性やメソッドをオーバーライドする(オーバーライド)
・静的プロパティまたは静的メソッド(静的メンバ)