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()」が実行される