JavaScriptのオブジェクト指向とは

オブジェクト指向とは



オブジェクト指向プログラミング (OOP) は、
実世界を元にしたモデルの作成に抽象化が行われます。
JavaやC ++などは、クラスにより、
JavaScriptは、プロトタイプにより、
オブジェクト指向言語として定義されます。

プロトタイプとは、
新しいオブジェクトの作成に、
既存のオブジェクトを使用することです。

既存のオブジェクトとしては、
JavaScriptの組込みFunction オブジェクトが使われます。

クラスの定義は、関数の定義とほぼ同じです。

var Person = function () {};

関数により、空のコンストラクタを作り、
Person という、
新たなクラスを定義することが出来ます。


JavaScriptの標準組込みオブジェクトとは



JavaScriptの基本的な組込みオブジェクトには、
Objectの他にも、
Function、Boolean、Symbol、
があります。
さらに基本オブジェクトの他に、
エラーオブジェクト、
数、日付、数学計算オブジェクト、
テキスト処理オブジェクト、
索引付きコレクションオブジェクト、
キーを使ったコレクションオブジェクト、
構造化データオブジェクト、
制御抽象化オブジェクト、
リフレクションオブジェクト、
国際化オブジェクト、
WebAssemblyオブジェクト、
その他のオブジェクトがあります。

他のプログラミング言語と様子が違い、
JavaScriptは、
プログラミング言語(ECMAScript)と、
DOM(Document Object Model)を含むWeb API から出来ています。

DOMはHTML、XHTML、XMLのオブジェクトを表します。

組み込みオブジェクトは、ECMAScript (詳しくは言語仕様)に含まれます。


ECMAScriptのproposalとは



ECMAScriptは、
Ecma Internationalによって標準化されている仕様です。
Ecma Internationalは、他にもC#やDartなどを標準化しています。
ES2016以降の仕様は、
仕様に追加する機能(API、構文など)を、
それぞれ個別のプロポーザル(提案書)として進め、
決定されます。

ECMAScriptのプロポーザル(提案書)は、
0 アイデアの段階
1 機能提案の段階
2 機能の仕様書ドラフトを作成した段階
3 仕様としては完成しており、ブラウザの実装やフィードバックを求める段階
4 仕様策定が完了し、2つ以上の実装が存在している
正式にECMAScriptにマージできる段階


クラスのプロトタイプを調べるには



次の例では、
Person という名前の新たなクラスを定義しています。
new Person()により、
インスタンスobject2 を生成しています。
Object.getPrototypeOf(object2)で、
プロトタイプを調べると、
空のオブジェクト{}、
になります。
初期化したインスタンスの作成は、
Object.create(Person)
の様にします。
この時のプロトタイプは、
[Function: Person]です。




var Person = function () {};
var object2 =new Person();
//var object2 =Object.create(Person);

console.log(Object.getPrototypeOf(object2));

{}
//[Function: Person]


クラスの使用例



次は、
Personクラスの使用例です。
Personクラスでは、
this.firstName = firstNameにより、
this.Property 構文を使用して、
クラスの内部でプロパティの値を取得しています。
次は、
new Person()により、
2つのインスタンス、
person1 、person2を作成します。
最後は、
console.logで、
person1.firstName、
person2.firstNameにより、
インスタンスのプロパティの値を表示しています。


var Person = function (firstName) {   this.firstName = firstName;  };  var person1 = new Person('大谷'); var person2 = new Person('鈴木');  console.log('person1 is ' + person1.firstName);  console.log('person2 is ' + person2.firstName); person1 is 大谷 person2 is 鈴木