概要
今回は3.JavaScriptの文法と構文について、の
プロトタイプについて確認していきます。
プロトタイプという言葉から、ひな形機能的なものを想定していますが、
どんな機能なのでしょうか。
※無料版なので、誤っている情報もあると思いますが、アウトプットできれば良しとします。
オブジェクト生成
JavaScriptにおけるプロトタイプの概要や使用方法を聞いてみます。
【質問】
JavaScriptの文法と構文について、プロトタイプについて、概要や使用方法、注意点を教えてください。
【回答】
JavaScriptは、オブジェクト指向プログラミング言語であり、プロトタイプベースのオブジェクト指向プログラミングを採用しています。
ここでは、JavaScriptのプロトタイプについて、概要や使用方法、注意点について説明します。
プロトタイプとは
JavaScriptのオブジェクトは、他のオブジェクトを継承することができます。
継承元のオブジェクトをプロトタイプと呼びます。
プロトタイプを指定することで、継承元のオブジェクトのプロパティやメソッドを継承した新しいオブジェクトを作成することができます。
プロトタイプの使用方法
プロトタイプを指定するには、prototypeプロパティを使用します。
prototypeプロパティには、プロトタイプオブジェクトが格納されます。
プロトタイプオブジェクトには、継承元オブジェクトのプロパティやメソッドを定義することができます。
例えば、以下のようにPersonオブジェクトを定義し、prototypeプロパティにsayHelloメソッドを定義することができます。
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
Personオブジェクトを継承したStudentオブジェクトを定義する場合は、StudentオブジェクトのプロトタイプにPersonオブジェクトを指定します。
function Student(name, grade) {
this.name = name;
this.grade = grade;
}
Student.prototype = new Person();
Student.prototype.sayGrade = function() {
console.log('My grade is ' + this.grade);
};
Studentオブジェクトは、Personオブジェクトを継承しており、
PersonオブジェクトのsayHelloメソッドを呼び出すことができます。
var student = new Student('Alice', 3);
student.sayHello(); // "Hello, my name is Alice"
注意点
プロトタイプを使用する際には、以下のような注意点があります。
プロトタイプオブジェクトで定義したプロパティやメソッドは、継承先オブジェクトのプロパティやメソッドとしてアクセスできます。
ただし、継承先オブジェクトで同じ名前のプロパティやメソッドが定義されている場合は、
継承先オブジェクトのプロパティやメソッドが優先されます。
Object.create()メソッドを使用することで、任意のオブジェクトをプロトタイプとして指定することができます。
プロトタイプを使用することで、継承関係を作成することができますが、
継承の階層が深くなりすぎると、パフォーマンスやメンテナンス性の問題が生じる場合があります。
適切な継承の階層を設計することが重要です。
ES6からは、クラス構文が導入され、クラスを使用することで、プロトタイプを継承することができます。
クラスを使用することで、より直感的に継承関係を定義することができます。
ただし、クラスは、実際にはJavaScriptのプロトタイプベースのオブジェクト指向プログラミングをラッピングしたものであるため、
内部的にはプロトタイプが使用されています。
プロトタイプベースのオブジェクト指向は他のオブジェクトを継承し、
継承元のオブジェクトが持つプロパティやメソッドを使用できるということですね。
一方、クラスベースのオブジェクト指向は、クラスからオブジェクトを生成して、
クラス内で定義されたプロパティやメソッドを使用できます。