JavaScript で継承を実現する方法を実装しようとしています。まず、次のように基本クラスを定義します。
function Person(name){
name = name + "!"; //I want to reuse this code for initialization
this.getName = function(){
return name;
};
this.setName = function(_name){
name = _name;
};
};
次に、サブクラスを定義します。基本クラスのコンストラクターを呼び出す方法が必要になることがあります。理想的には、 paramVipPerson
の参照がまだあるときに、コンストラクター内から呼び出します。name
しかし、その時点からそれを行うと、単に機能せずgetName
、基本クラスからアクセスしようとすると、VipPerson has no getName method
.
function VipPerson(name, vipLevel){
this.getVipLevel = function(){
return vipLevel;
};
//the line below would not work!
//VipPerson.prototype = new Person(name);
};
VipPerson.prototype = new Person(); //but this would. not ideal IMO
外部からプロトタイプを設定することの欠点は、VipPerson
渡されたパラメーターへの参照が失われることです。
これを解決するエレガントな方法はありますか?このきれいなインターフェースが欲しいです:
var foo = new Person("Foo");
console.log(foo.getName());
var bar = new VipPerson("Bar", 100);
console.log(bar.getName()); //error
console.log(bar.getVipLevel());