はじめに JavaScriptでオブジェクト指向言語の継承に相当する概念を実装する方法は、大きく分けて4つあります。実務上はライブラリを使ったり、TypeScriptを使ったりと、直接意識する必要があることは少ないわけですが、それだといつまでたっても「JavaScriptにおける継承」を理解できません。ES6で、シンタックスシュガーとしてのclass / extendも導入される可能性も高そうですが、そんな今だからこそ「本来はどう書くのか?」を整理してみることにしました。 1) コンストラクタを使いprototypeチェーンを使って継承する 2) コンストラクタは使うが、prototypeチェーンは使わず、prototypeを直接拡張する 3) コンストラクタは使わず、prototypeチェーンを使って継承する 4) コンストラクタもprototypeも使わず、直接オブジェクトを拡張する