JavaScriptインスタンス作成&活用法10選!初心者も分かりやすい解説

JavaScriptインスタンス作成&活用法イメージJS
この記事は約9分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、JavaScriptのインスタンスの作成や使い方、注意点、カスタマイズ方法が理解できるようになります。

サンプルコードや応用例も紹介していますので、初心者でも安心して学べます。

JavaScriptインスタンスとは

JavaScriptのインスタンスは、オブジェクト指向プログラミングの基本概念である「オブジェクト」を生成するためのものです。

これによって、複数の異なるデータや関数を一つにまとめることができます。

インスタンスの基本

インスタンスは、あるクラスから生成されるオブジェクトです。

クラスはオブジェクトの設計図のようなもので、インスタンスはその設計図に基づいて生成された実体です。

インスタンスの作り方

JavaScriptでインスタンスを作成するには、まずクラスを定義します。

クラスは「class」キーワードを使って定義し、その後「new」キーワードを使ってインスタンスを生成します。

○サンプルコード1:基本的なインスタンスの作成

class MyClass {
  constructor() {
    this.myProperty = 'Hello, World!';
  }

  myMethod() {
    console.log(this.myProperty);
  }
}

const myInstance = new MyClass();
myInstance.myMethod(); // Output: Hello, World!

インスタンスの使い方

インスタンスを活用するには、インスタンスメソッドとインスタンスプロパティを利用します。

インスタンスメソッドはクラス内で定義された関数で、インスタンスプロパティはクラス内で定義された変数です。

○サンプルコード2:インスタンスメソッドの利用

class MyClass {
  constructor() {
    this.myProperty = 'Hello, World!';
  }

  myMethod() {
    console.log(this.myProperty);
  }
}

const myInstance = new MyClass();
myInstance.myMethod(); // Output: Hello, World!

○サンプルコード3:インスタンスプロパティの利用

class MyClass {
  constructor() {
    this.myProperty = 'Hello, World!';
  }
}

const myInstance = new MyClass();
console.log(myInstance.myProperty); // Output: Hello, World!

インスタンスの応用例 JavaScriptのインスタンスを利用することで、さまざまなデザインパターンや機能を実装できます。

○サンプルコード4:カスタムイベントの作成

class CustomEventEmitter {
  constructor() {
    this.events = {};
  }

  on(eventName, listener) {
    if (!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(listener);
  }

  emit(eventName, data) {
    if (this.events[eventName]) {
      this.events[eventName].forEach(listener => listener(data));
    }
  }
}

const eventEmitter = new CustomEventEmitter();
eventEmitter.on('myEvent', data => console.log(data));
eventEmitter.emit('myEvent', 'Hello, World!'); // Output: Hello, World!

○サンプルコード5:継承を利用したクラスの拡張

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

class Dog extends Animal {
  speak() {
    console.log(`${this.name} barks.`);
  }
}

const dog = new Dog('Max');
dog.speak(); // Output: Max barks.

○サンプルコード6:シングルトンパターンの実装

class Singleton {
  constructor() {
    if (!Singleton.instance) {
      this.data = 'Hello, Singleton!';
      Singleton.instance = this;
    }

    return Singleton.instance;
  }
}

const instance1 = new Singleton();
const instance2 = new Singleton();

console.log(instance1 === instance2); // Output: true

○サンプルコード7:ファクトリパターンの実装

class AnimalFactory {
  createAnimal(type, name) {
    switch (type) {
      case 'dog':
        return new Dog(name);
      case 'cat':
        return new Cat(name);
      default:
        throw new Error('Unknown animal type.');
    }
  }
}

const factory = new AnimalFactory();
const dog = factory.createAnimal('dog', 'Max');
const cat = factory.createAnimal('cat', 'Mimi');

dog.speak(); // Output: Max barks.
cat.speak(); // Output: Mimi meows.

○サンプルコード8:モジュールパターンの実装

const myModule = (() => {
  const privateData = 'Hello, Module!';

  function privateMethod() {
    console.log(privateData);
  }

  return {
    publicMethod: privateMethod
  };
})();

myModule.publicMethod(); // Output: Hello, Module!

○サンプルコード9:プロトタイプチェーンの活用

function Animal(name) {
  this.name = name;
}

Animal.prototype.speak = function() {
  console.log(`${this.name} makes a noise.`);
};

function Dog(name) {
  Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.speak = function() {
  console.log(`${this.name} barks.`);
};

const dog = new Dog('Max');
dog.speak(); // Output: Max barks.

○サンプルコード10:コンポジションパターンの実装

class Eater {
  eat() {
    console.log('Eating...');
  }
}

class Sleeper {
  sleep() {
    console.log('Sleeping...');
  }
}

class Human {
  constructor() {
    this.eater = new Eater();
    this.sleeper = new Sleeper();
  }

  eat() {
    this.eater.eat();
  }

  sleep() {
    this.sleeper.sleep();
  }
}

const human = new Human();
human.eat(); // Output: Eating...
human.sleep(); // Output: Sleeping...

インスタンスの注意点

JavaScriptのインスタンスを利用する際には、下記の点に注意してください。

  1. インスタンスは、クラスのコンストラクタで生成されたものであるため、初期化時に何らかの値が必要な場合はコンストラクタに引数を渡す必要があります。
  2. インスタンスメソッドやインスタンスプロパティにアクセスする際には、「インスタンス名.メソッド名()」や「インスタンス名.プロパティ名」の形式でアクセスすることが一般的です。
  3. JavaScriptのプロトタイプチェーンを利用することで、クラス間の継承を実現できますが、プロトタイプチェーンの構造に注意して実装する必要があります。

インスタンスのカスタマイズ

インスタンスのカスタマイズには、主に下記の方法があります。

  1. クラスのコンストラクタに引数を渡して、インスタンスごとに異なるプロパティやメソッドを持たせることができます。
  2. クラスのメソッドをオーバーライドして、継承元のクラスとは異なる挙動を実現できます。
  3. クラスのプロトタイプにメソッドを追加することで、すべてのインスタンスがそのメソッドを利用できるようになります。

まとめ

この記事では、JavaScriptのインスタンスについて、その作り方、使い方、応用例、注意点、カスタマイズ方法などを詳しく解説しました。

インスタンスを利用することで、より効率的なコードが書けるようになります。

ぜひ、今回紹介したサンプルコードを参考に、自分のプロジェクトでインスタンスを活用してみてください。