js 無名関数で継承
作成日:2020-09-07, 更新日:2020-09-07
基本
継承とは異なるらしい。
細かいコトはよくわからんし、いろいろと方法あるし・・・ひとまず分かりやすい書き方
// 継承元にしたい無名関数 var cls1 = function(){ 〇〇〇 } // 書き換えたい内容で無名関数を用意→prototypeに継承元をセット var cls2 = function(){ 〇〇〇 } cls2.prototype = new cls1; // 継承したクラスを使う var func = new cls2();
サンプル
下記は、たぶん想定通りには動かないと思う・・・詳細は未調査。
// 継承元にしたい無名関数 var cls1 = function(){ var self = this; self.memb1 = 'ABC'; self.memb2 = 'CBA'; self.meth1 = function(){ alert(101); } self.meth2 = function(){ alert(201); } } // 書き換えたい内容で無名関数を用意→prototypeに継承元をセット var cls2 = function(){ var self = this; self.memb1 = 'DEF'; self.meth1 = function(){ alert(102); } } cls2.prototype = new cls1; // 継承したクラスを使う var func = new cls2(); func.meth1(); // 「102」がアラートで表示される func.meth2(); // 「201」がアラートで表示される alert(func.memb1); // 「DEF」がアラートで表示される alert(func.memb2); // 「CBA」がアラートで表示される
メモ:prototypeについて
・クラスの継承とprototypeは異なる。
▼prototypeを使うとメソッドが無いときに参照する
・「cls1 .hoge()」があり「cls2.hoge()」が無い→「cls2.prototype.hoge()」が実行される
・「cls1 .hoge()」があり「cls2.hoge()」もある→「cls2.hoge()」が実行される