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][Object Methods] Objectメソッドとは _Applied (コンストラクタ関数、new、this)

Posted at

概要

JavaScriptにおける Object は、すべてのオブジェクトの親的存在であり、
オブジェクトの生成・管理・継承の基盤を提供します。
特に コンストラクタ関数newthis を理解することで、
JavaScriptの「オブジェクト指向的な仕組み」が見えてきます。

つまり、

  • コンストラクタ関数 … オブジェクトの設計図
  • new演算子 … 設計図から新しいオブジェクトを生成
  • this … 生成されたオブジェクト自身を参照

これらを理解すると、Object.assign, Object.create, Object.freeze などの
Objectメソッドを効果的に使いこなせるようになります。

目次

コンストラクタ関数とは

コンストラクタ関数は、オブジェクトを生成するための設計図です。
関数名は慣習的に 大文字で始めます

JavaScript
function User(name, age) {
  this.name = name;
  this.age = age;
  this.greet = function() {
    console.log(`Hello, I'm ${this.name} (${this.age})`);
  };
}

上記では、thisnameage プロパティを設定しています。
しかし、ここではまだ User 関数を「設計」しただけで、
実際のオブジェクトはまだ存在していません。

newによるインスタンス生成

new 演算子を使うことで、設計図(コンストラクタ関数)からオブジェクトを生成できます。

JavaScript
const alice = new User("Alice", 25);
alice.greet(); // Hello, I'm Alice (25)

new の内部では以下の4ステップが行われます:

  1. 新しい空のオブジェクト {} を生成
  2. そのオブジェクトを this に割り当てる
  3. コンストラクタ関数を実行して this にプロパティを設定
  4. そのオブジェクトを自動的に返す

thisの役割と参照先

this は、関数が「どの文脈で呼ばれたか」によって参照先が変わる特別なキーワードです。

コンストラクタ関数内では、常に「生成されたインスタンス自身」を指します。

JavaScript
function Car(model) {
  this.model = model;
  this.start = function() {
    console.log(`${this.model} started!`);
  };
}

const car1 = new Car("Toyota");
car1.start(); // Toyota started!

this.modelcar1.model を参照します。
つまり、thisnew で作られたオブジェクトそのものを指しているのです。

Objectメソッドと組み合わせる応用例

コンストラクタ・new・thisの理解を基礎として、
Object の静的メソッドを活用すれば、柔軟なオブジェクト管理が可能です。

Object.assign と this

複数の設定をインスタンスにまとめて適用する例です。

JavaScript
function Config(options) {
  Object.assign(this, { theme: "light", lang: "en" }, options);
}

const userConfig = new Config({ lang: "ja" });
console.log(userConfig); // { theme: "light", lang: "ja" }
  • Object.assign(this, defaultSettings, options) によって、
    デフォルトとユーザー設定をまとめて統合します。
  • 同じキーは後から来たオブジェクト(options)で上書きされます。

Object.freeze とコンストラクタ

インスタンスの内容を変更不可にしたい場合に使います。

JavaScript
function Account(name, balance) {
  this.name = name;
  this.balance = balance;
  Object.freeze(this);
}

const acc = new Account("Alice", 1000);
acc.balance = 2000; // 無視される
console.log(acc.balance); // 1000
  • Object.freeze(this) により、
    作成後のインスタンスを「凍結」してセキュアに保護できます。

Object.create とプロトタイプ継承

Object.create は、既存オブジェクトを継承する新しいオブジェクトを作るメソッドです。
new を使わないオブジェクト生成方法としても知られています。

JavaScript
const animal = {
  speak() {
    console.log(`${this.name} makes a sound.`);
  }
};

const dog = Object.create(animal);
dog.name = "Dog";
dog.speak(); // Dog makes a sound.
  • Object.create(proto)proto を継承したオブジェクトを返す。
  • コンストラクタを使わず、軽量な継承を実現可能。

まとめ

概念 機能 使い方のポイント
コンストラクタ関数 オブジェクトの設計図 関数名は大文字で開始する
new演算子 インスタンス生成 thisに新しいオブジェクトを割り当てる
this 呼び出し元のオブジェクト参照 コンストラクタでは生成されたオブジェクトを指す
Object.assign プロパティの統合 複数設定のマージに便利
Object.freeze オブジェクトの凍結 データの変更防止
Object.create プロトタイプ継承 軽量な継承パターンを実現

参考リンク

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?