JavaScript オブジェクト指向プログラミング入門: new キーワードとコンストラクタ関数

2024-04-02

JavaScript の new キーワードとは?

コンストラクタ関数を呼び出す

new キーワードと関数名を組み合わせることで、その関数を コンストラクタ関数 として呼び出すことができます。コンストラクタ関数は、オブジェクト生成時に実行される特別な関数です。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const person1 = new Person("山田太郎", 30);
const person2 = new Person("佐藤花子", 25);

console.log(person1.name, person1.age); // 山田太郎 30
console.log(person2.name, person2.age); // 佐藤花子 25

上記の例では、Person というコンストラクタ関数を定義し、new キーワードを使って person1person2 というオブジェクトを生成しています。

コンストラクタ関数の利点:

  • オブジェクト生成時に共通の処理をまとめられる
  • オブジェクトにプロパティとメソッドを自由に設定できる
  • オブジェクトの初期化を簡単に行える

プロトタイプチェーンを利用する

JavaScript のオブジェクトは プロトタイプチェーン という仕組みを利用して、プロパティやメソッドを継承することができます。

new キーワードを使ってオブジェクトを生成すると、そのオブジェクトは コンストラクタ関数のプロトタイプ を継承します。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function() {
  console.log(`こんにちは、私の名前は${this.name}です。`);
};

const person1 = new Person("山田太郎", 30);

person1.sayHello(); // こんにちは、私の名前は山田太郎です。

上記の例では、Person コンストラクタ関数のプロトタイプに sayHello メソッドを追加しています。person1 オブジェクトは Person コンストラクタ関数のプロトタイプを継承しているので、sayHello メソッドを呼び出すことができます。

プロトタイプチェーンの利点:

  • コードの冗長性を減らせる
  • オブジェクトの機能を拡張しやすい
  • メモリ使用量を削減できる

その他の利点

  • オブジェクトの型を安全にチェックできる
  • 拡張性のあるコードを書きやすい

new キーワードは、JavaScript でオブジェクトを生成する際に非常に便利な演算子です。コンストラクタ関数と組み合わせることで、オブジェクト生成時に共通の処理を実行したり、プロトタイプチェーンを利用してオブジェクトの機能を拡張したりすることができます。

new キーワードを理解することで、より効率的で堅牢な JavaScript コードを書くことができます。




コンストラクタ関数と new キーワード

function Person(name, age) {
  this.name = name;
  this.age = age;

  this.sayHello = function() {
    console.log(`こんにちは、私の名前は${this.name}です。`);
  };
}

const person1 = new Person("山田太郎", 30);
const person2 = new Person("佐藤花子", 25);

console.log(person1.name, person1.age); // 山田太郎 30
console.log(person2.name, person2.age); // 佐藤花子 25

person1.sayHello(); // こんにちは、私の名前は山田太郎です。
person2.sayHello(); // こんにちは、私の名前は佐藤花子です。

プロトタイプチェーン

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function() {
  console.log(`こんにちは、私の名前は${this.name}です。`);
};

const person1 = new Person("山田太郎", 30);

person1.sayHello(); // こんにちは、私の名前は山田太郎です。

// Person.prototype オブジェクトに直接プロパティを追加することもできます
Person.prototype.favoriteColor = "青";

console.log(person1.favoriteColor); // 青

その他の例

  • new キーワードを使って、組み込みオブジェクトを生成することもできます。
const date = new Date();
console.log(date.toString()); // 2023-11-14T07:27:53.524Z
const error = new Error("エラーが発生しました");
console.log(error.message); // エラーが発生しました



オブジェクト生成の他の方法

オブジェクトリテラルは、最もシンプルで直感的な方法です。

const person = {
  name: "山田太郎",
  age: 30,
  sayHello: function() {
    console.log(`こんにちは、私の名前は${this.name}です。`);
  },
};

console.log(person.name, person.age); // 山田太郎 30
person.sayHello(); // こんにちは、私の名前は山田太郎です。

Object.create() メソッドは、指定されたオブジェクトをプロトタイプとして、新しいオブジェクトを作成します。

const personPrototype = {
  sayHello: function() {
    console.log(`こんにちは、私の名前は${this.name}です。`);
  },
};

const person = Object.create(personPrototype);
person.name = "山田太郎";
person.age = 30;

console.log(person.name, person.age); // 山田太郎 30
person.sayHello(); // こんにちは、私の名前は山田太郎です。

クラス

ES6 以降では、クラスを使ってオブジェクトを生成することができます。

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`こんにちは、私の名前は${this.name}です。`);
  }
}

const person = new Person("山田太郎", 30);

console.log(person.name, person.age); // 山田太郎 30
person.sayHello(); // こんにちは、私の名前は山田太郎です。
  • シンプルなオブジェクトを生成する場合は、オブジェクトリテラルが最も簡単です。
  • プロトタイプチェーンを利用したい場合は、Object.create() メソッドを使うことができます。
  • より複雑なオブジェクトを生成したい場合は、クラスを使うとコードを整理しやすくなります。

new キーワード以外にも、オブジェクト生成方法はいくつかあります。それぞれの方法の特徴を理解し、状況に合わせて使い分けることが重要です。


javascript new-operator


Abort Ajax requests using jQuery: 完全ガイド

abort() メソッドを使用する$.ajaxSetup() メソッドを使用してデフォルトのオプションを設定するそれぞれの方法について、具体的なコード例と詳細な説明を紹介します。abort() メソッドは、特定のAjaxリクエストを中止するために使用します。この方法は、リクエストがまだ実行中の場合にのみ有効です。...


JavaScript, jQuery, HTMLでcontenteditable changeイベントを理解する

contenteditable属性を持つ要素は、ユーザーが直接編集できる要素です。この要素の内容が変更されたときに、イベントが発生します。このイベントをcontenteditable changeイベントと呼びます。このイベントを利用することで、ユーザーが編集した内容をリアルタイムで取得したり、編集内容に応じて処理を行うことができます。...


カンタン操作でバッチリ!jQueryでテキストの色を変更するチュートリアル

ここでは、jQueryでテキストの色を簡単に変更する方法を、3つのステップに分けて解説します。ステップ1:必要なライブラリを準備するまず、jQueryライブラリをプロジェクトに読み込む必要があります。以下の2つの方法があります。CDNから読み込む以下のコードを <head> タグ内に追加します。<script src="https://code...


【徹底解説】JavaScript、CSS、DOMでスクロールバーの表示を確認する方法

ここでは、JavaScript、CSS、DOM を用いてスクロールバーの表示を確認する方法を、それぞれ詳しく解説します。JavaScript では、以下のプロパティを用いてスクロールバーの表示状態を確認することができます。overflow-x: 要素の水平方向のスクロールバーの表示状態を制御します。...


JavaScriptのforEachループを超えた!TypeScriptでより柔軟なループ処理を実現

TypeScriptで配列をループ処理する場合、よく使われるのがforEachループです。しかし、forEachループ内ではbreakキーワードを使ってループを抜け出すことができません。そこで、今回は、forEachループを抜け出す2つの方法をご紹介します。...