オブジェクトマスカレーディングによるクラスの継承 ~ JavaScript によるオブジェクト指向プログラミング
クラスの継承の実装、内部変数へのアクセス制御の複雑さの解消など、ES6 以降で解決された問題は多いです。 ES6移行向けに開発可能な場合はなるべく「JavaScript のクラス定義」で紹介した方法で実装されることをお勧めします。
ここでは 関数による継承 (Functional Inheritance) を説明します。 大変自然な方法なので、ぜひ理解し活用したいものです。
以下の例では person クラスを先に定義し、次に student に継承します。 student は person オブジェクトの say_hello を継承するほか、go_school という名前のメソッドを追加しています。
var person = function (n) { var name = n; return { say_hello: function() { alert( name ); } }; }; var student = function(n) { var that = person(n); that.go_school = function() { alert('Hi'); }; return that; }; var s1 = student('Ichiro Suzuki'); s1.say_hello(); s1.go_school();
クロージャを理解していれば、コードは簡単に理解できると思います。
実装も簡単ですし、保護したいデータもちゃんと保護されています。 この方法を基本として考えるべきと思います。