JavaScript OOP (プロトタイプ) #2
Nov 27 2022
こんにちは、Bennison です。このブログでは、OOP が Javascript でどのように機能するかを説明し、それが従来の OOP とどのように異なるかを説明します。この記事を読む前に、OOP の基礎に関する私の以前のブログを読んでください。
こんにちは、Bennison です。このブログでは、OOP が Javascript でどのように機能するかを説明し、それが従来の OOP とどのように異なるかを説明します。この記事を読む前に、OOP の基礎に関する私の以前のブログを読んでください。
プロトタイプとは?
- JavaScript では、プロトタイプと呼ばれるものがあります。JavaScript では、すべてのオブジェクトが特定のプロトタイプにリンクされています。したがって、各オブジェクトにはプロトタイプがあります。プロトタイプには、プロパティとメソッドも含まれています。
- ここで重要なことは、プロトタイプのメソッドとプロパティがオブジェクトからアクセスできることです。
- 古典的な OOP では、オブジェクトはインスタンス化と呼ばれるクラスからインスタンス化されます。ここでのクラスは、オブジェクトを作成するための単なる青写真です。
- しかし、Javascript では、この用語はまったく異なります。ここで、各オブジェクトは他のオブジェクトとリンクされており、それらのオブジェクトはプロトタイプと呼ばれます。
- プロトタイプ継承とは、メソッドを含むプロトタイプと、そのプロトタイプにリンクされたすべてのオブジェクトにアクセスできるプロトタイプを意味します。
- オブジェクトはプロトタイプからメソッドとプロパティを継承します。これをプロトタイプ継承と呼びます。この継承は、あるクラスが他のクラスから継承されるクラス継承とは異なります。ただし、この場合は、基本クラスから継承するインスタンスです。
- 上の画像では、javascript OOP の矢印が上向きになっています。これは、オブジェクトがその動作をプロトタイプに委譲することを意味します。
- 古典的な OOP では、メソッドはクラスからインスタンス (オブジェクト) にコピーされます。
const numbers = [1, 2, 3, 4,5];
numbers.map((num) => num * 2)
- コンストラクター関数は、関数からオブジェクトを作成するために使用されます。これが、Array や map メソッドなどの組み込みオブジェクトの実装方法です。
- これは、コンストラクター関数の最新の代替手段です。ES6 クラスは、コンストラクター関数と同じように機能します。ES6 クラスは従来の OOP のようには動作しません。舞台裏では、ES6 クラスはコンストラクター関数で実装されています。
class User {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
getFullName() {
console.log(this.firstName + ' ' + this.lastName);
}
}
const user = new User('Bennison', 'J');
console.log(user); // { firstName: 'Bennison', lastName: 'J' }
console.log(user.hasOwnProperty('firstName')); // true
console.log(user.hasOwnProperty('getFullName')); // false
- 「object.create()」メソッドは、オブジェクトをプロトタイプ オブジェクトにリンクする最も簡単な方法です。
const objOne = {
firstName: 'Bennison',
lastName: 'J',
getFullName: function () {
console.log(this.firstName + ' ' + this.lastName);
}
};
const objTwo = Object.create(objOne);
console.log(objTwo); // {}
objTwo.getFullName(); // Bennison J
- このブログでは、Javascript のプロトタイプ継承の基本を学びました。上記の例を理解できなくても心配しないでください。今後のブログでこれらの概念について詳しく説明します。このブログを読んでくれてありがとう、またね。

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































