JavaScript は柔軟で強力なプログラミング言語であり、その独自のプロトタイプ チェーンと継承メカニズムはその中核機能の 1 つです。この記事では、読者がこの重要な概念をよりよく理解できるように、JavaScript のプロトタイプ チェーンと継承メカニズムについて詳しく説明します。
プロトタイプチェーンとは何ですか?
JavaScript では、すべてのオブジェクトに、プロトタイプと呼ばれる別のオブジェクトに内部リンクする参照があります。プロトタイプ オブジェクトにはプロパティとメソッドを含めることができ、他のオブジェクトはこれらのプロパティとメソッドを継承できます。オブジェクトのプロパティまたはメソッドにアクセスすると、JavaScript はまずオブジェクト自体を調べ、見つからない場合は、プロパティまたはメソッドが見つかるか、プロトタイプ チェーンの先頭に到達するまで、プロトタイプ チェーンを検索します。
上記のコードでは、 2 つのクラスPerson
と を定義しStudent
、キーワード を使用してクラスのサブクラスextends
を作成しました。プロトタイプ チェーンを介してメソッドの継承を実装すると、サブクラスが親クラスのメソッドに確実にアクセスできるようになります。Student
Teacher
オブジェクトのプロトタイプチェーンを作成する
__proto__
すべての JavaScript オブジェクトには、オブジェクトを作成したコンストラクターのプロトタイプ オブジェクトを指す組み込みプロパティがあります。このリンクがプロトタイプ チェーンの鍵となります。これを例で理解してみましょう。
function Animal() {}
const dog = new Animal();
console.log(dog.__proto__); // 输出:Animal {}
console.log(Animal.prototype); // 输出:Animal {}
console.log(dog.__proto__ === Animal.prototype); // 输出:true
上の例では、空のコンストラクAnimal
ターを作成し、キーワードを使用して名前を付けたオブジェクトをnew
作成しました。を指すので、そのプロパティとメソッドを継承できます。dog
dog.__proto__
Animal.prototype
dog
Animal.prototype
プロトタイプチェーンの継承とメソッドの書き換え
JavaScript では、サブクラスは親クラスのメソッドを継承でき、継承されたメソッドをオーバーライドすることもできます。上記のコード例で説明してみましょう。
class Person{
constructor(name) {
this.name=name;
}
introduce(){
console.log(`Hello, I am ${this.name}`);
}
drink(){
console.log('I am drinking');
}
}
class Student extends Person{
constructor(name,score) {
super(name)
this.score= score;
}
introduce(){
console.log(`Hello, I am ${this.name}.and ${this.score}is my score`);
}
}
const student =new Student('John', 100);
student.introduce();
class Teacher extends Person{
constructor(name,subject){
super(name)
this.subject=subject;
}
introduce(){
console.log(`Hello, I am ${this.name}.and ${this.subject}is my subject`);
}
}
const teacher =new Teacher('John', 'Math');
teacher.introduce();
console.log(student)
teacher.drink();
上記の例では、Student
クラスはPerson
クラスを継承し、introduce()
メソッドをオーバーライドします。を呼び出すと、クラス内のメソッドではなく、クラス内のメソッドstudent.introduce()
が実行されます。Student
introduce()
Person
継承とスーパーキーワード
サブクラスでは、super
キーワードを使用してスーパークラスのコンストラクターとメソッドを呼び出すことができます。これにより、サブクラスとその親クラスの関連性が維持され、サブクラスに追加の機能が追加されます。上の例を続けて、Teacher
クラスに新しいメソッドを追加し、スーパークラスのコンストラクターを呼び出してみましょう。
上記の例では、コンストラクターsuper(name)
を呼び出すことで、クラスがインスタンス化されるときに初期化のために親クラスのコンストラクターも呼び出されることを保証します。Person
Teacher
class Teacher extends Person {
constructor(name, subject) {
super(name);
this.subject = subject;
}
introduce() {
console.log(`Hello, I am ${this.name}. and ${this.subject} is my subject`);
}
teach() {
console.log('I am teaching');
}
}
const teacher = new Teacher('John', 'Math');
teacher.introduce(); // 输出:Hello, I am John. and Math is my subject
teacher.teach(); // 输出:I am teaching
要約する
JavaScript のプロトタイプ チェーンと継承メカニズムは、JavaScript の強力な機能の 1 つです。プロトタイプ チェーンを通じて、オブジェクトは他のオブジェクトのプロパティとメソッドを継承して、コードの再利用と編成を実現できます。サブクラスでは、extends
キーワードを通じて親クラスを継承し、super
キーワードを使用して親クラスのコンストラクターとメソッドを呼び出すことができます。このようにして、より柔軟で拡張可能なコード構造を作成できます。
この記事が JavaScript のプロトタイプ チェーンと継承メカニズムを理解するのに役立つことを願っています。この概念をしっかり理解すると、JavaScript コードをより快適に作成できるようになります。コーディングを楽しんでください!