継承
// 簡単な継承。雑
var Hoge = function(){};
var Piyo = function(){};
Hoge.prototype = Piyo.prototype;
// 簡単な継承
function inherit(oldCls, object){
var newCls = function(){};
newCls.prototype = oldCls.prototype;
for(var prop in object){
if(!object.hasOwnProperty(prop)){ continue; }
newCls.prototype[prop] = object[prop];
}
newCls.prototype.constructor = newCls;
return newCls;
}
n番煎じだと思うJSの継承のメモ書き。
extend
は拡張、inherit
が継承 と英単語的には違うらしいのでいつも悩んだりします。
クラス定数…
public static String CONST_HOGE = 'hoge';
のような定数が作れたとすると、上記のロジックでは継承することが出来ないです。
for(var prop in object){
if(!object.hasOwnProperty(prop)){ continue; }
newCls[prop] = oldCls[prop];
}
たぶんこんな感じになる。
そもそも
出力すると分かるんですが…。
object
が持っているプロパティをすべてnewCls.prototype
に入れちゃっているので、
インスタンスを作った時に、__proto__
の中にいて、まるで
「僕も継承されちゃったんですよ☆」
みたいな状態になってて凄く腹ただしい。
ただコンストラクタ関数でthis.bar
と宣言するか、instance.foo
のようにインスタンスオブジェクトに付けないと出てこないので、
考えるのをやめた。
ともあれ
JavaScriptでそこまで継承をすることは(現状私には)ないし、
ちょっと足りないので、まぁいいかなと。
プロトタイプチェーンの勉強にはなると思いますが。
というかプロトタイプチェーンの話のためのネタですよね???