0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JavaScript】class構文とnew演算子について(勉強)

Posted at

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はお互いに必要な存在

  1. :「インスタンスの生成と初期化」のための特殊なメソッド

  2. オブジェクト内で定義された関数

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?