【javascript】コンストラクタ関数でprototype拡張を使うメリット(メモリ節約)

Carというコンストラクタ関数に、drive()というメソッドを追加する場合、上記のように2つのやり方があります。

  1. 前者のコンストラクタ関数のプロパティとして関数を追加する方法
  2. 後者のコンストラクタ関数をprototype拡張して追加する方法

基本的に汎用的なメソッドを追加する場合は、後者のprototype拡張を利用したほうが良いです。

Prototype拡張を利用したほうが良い理由

メソッドを追加するときに、コンストラクタ関数のプロパティとして追加するよりも、prototype拡張を利用したほうが良い理由はメモリの節約です。

このように、コンストラクタ関数のプロパティとして、メソッドを追加すると、全てのインスタンスのプロパティとしてdrive()メソッドを持ちます。

一方、prototype拡張を利用した場合、

このように、インスタンス化した変数の中にはdriveメソッドを持つことがなく、drive()メソッドを実行したタイミングで、prototypeからdrive()メソッドを呼び出します。

パフォーマンス向上のためにも、prototype拡張がオススメ

javascriptの場合、オブジェクトがプロパティを保持していなかった場合、prototypeにそのプロパティがないかを探しに行くため、prototype拡張を利用しておけば、メモリを無駄に消費せずに、必要なとき(実行時)のみ処理を走らせることができます!

ABOUTこの記事をかいた人

新卒でノマドワーカー(webデザイナー)として独立し、半年で月収100万円を達成する。その後、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んできました。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは、お金のことを考えずに、様々な企業でエンジニア修行をさせていただきながら、複数のメディアやアプリとweb制作事務所を運営しています。 趣味は株式投資(米国・日本株メイン)で、トレードを楽しむ日も多いです!