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