javascriptについて勉強しているとnew演算子とclass構文で躓いたので自分メモ用にまとめてみる。
(書籍やWEBサイト、chatGPTで調べたものをまとめています。)
間違いがあったら教えていただけると嬉しいです。
対象者
- javascriptのclass構文やnew演算子について学んだが、それぞれの関係性、必要性がわからない方
class構文は設計図を定義している(だけ)
実際にオブジェクトを作るものではない(classだけではオブジェクトは存在していない)
⇒仮に車の設計図だったとして、設計図だけあっても車は動かない。
コンストラクタ1やメソッド2の定義をする時に使われる。
例:
class Robot {
constructor(name) {
this.name = name;
}
hello() {
console.log(`こんにちは、私は${this.name}ロボです!`);
}
}
//定義しただけであって、オブジェクトは存在していない
【その他特徴】
- ES2015から導入されたもの(それまでは関数を使って対応していた)
- データ型は関数
classについては、モダンスタイルによる基礎から現場での応用まで JavaScript本格入門で以下のように補足説明されている。
より正しくは、JavaScriptにはクラス/インスタンスという区別は存在しません。
JavaScriptにあるのはオブジェクトだけであり、あるオブジェクトをプロトタイプ(雛形)として別のオブジェクトを定義するのが基本です。
~中略~
ただし、ES2015のクラスは、あくまでプロトタイプをらしく見せるための糖衣構文(シンタックスシュガー)にすぎません。
new演算子はclass(設計図)に基づいてオブジェクトを作る
設計図をもとに実際のオブジェクトを作るための仕組み
⇒設計図があったとして、newがあれば車を作れる(オブジェクト化)
例:
const robot1 = new Robot("ABC");
// robot1 という実際のオブジェクトに対してメソッドを呼び出せる
robot1.hello(); // こんにちは、私はABCロボです!
補足
シンタックスシュガー(糖衣構文)とは
⇒ やっていることは同じだけど、より読みやすく、書きやすくした方法
上記で書いた通りJavaScriptのclassはES2015から導入されたものなので、それ以前は別の方法で作っていた。
// 「class」のない時代のやり方(コンストラクタ関数とプロトタイプ)
function Robot(name) {
this.name = name;
}
Robot.prototype.hello = function () {
console.log(`こんにちは、私は${this.name}ロボです!`);
};
やっていることは同じだが、もっと見やすくしたものがclass構文。
理解した内容
classとnewはお互いに必要な存在