結局、JavaScriptはどう継承すればいいのか
結局、JavaScriptはどう継承すればいいのか。
調べてもサイトによって書いてる事が違うので、ひとまず、信用できそうな方法を以下にまとめます。
(非 ES6 です。)
乃木坂46の秋元真夏を親クラス、相楽伊織を子クラスとします。
2期生の相楽は、1期生秋元の意思を継いでるわけですね。
prototype継承用の関数。
一時的なプロキシコンストラクタを使います。
// prototype継承用の関数 var inherit = (function() { var F = function() {}; // クロージャを利用 return function(C, P) { F.prototype = P.prototype; C.prototype = new F(); C.uber = P.prototype; C.prototype.constructor = C; } }());
こちら、親クラス。
// 親クラス var Parent = function() { this.group = '乃木坂46'; this.name = '秋元真夏'; } Parent.prototype.shoot = function() { console.log(this.group + 'の' + this.name + 'です。ズッキュン!'); }
子クラスです。
applyメソッドで、親コンストラクタのプロパティを継承。
inherit関数で、親のprototypeに設定されたメソッドを継承してます。
// 子クラス var Child = function() { Parent.apply(this, arguments); // 親のプロパティを継承 this.name = '相楽伊織'; } inherit(Child, Parent); // 親のメソッドを継承
実行。相楽伊織がズッキュンを継承してくれました。
var child = new Child; child.shoot(); // 乃木坂46の相楽伊織です。ズッキュン!
うーん、まだprototypeを使いこなしてる感じがしないなぁ。
もう少し粘着して覚えていきます。