// Base class
var Base = function() {
this._value = 'base';
};
Base.prototype = {
constructor: Base,
// By function
getValue: function() {
return this._value;
},
// By getter
get value() {
return this._value;
}
};
// Sub class extends Base
var Sub = function() {
this._value = 'sub';
};
Sub.prototype = {
constructor: Sub
};
// Pass over methods
Sub.prototype.getValue = Base.prototype.getValue;
Sub.prototype.value = Base.prototype.value;
// ---
var mySub = new Sub();
alert(mySub.getValue()); // Returns 'sub'
alert(mySub.value); // Returns 'undefined'
一見、mySub.value は mySub.getValue() と同じものを返すように見えますが、ご覧のとおり、代わりに undefined を返します。明らかに、getter は Sub インスタンス (mySub) として親スコープを見つけているのではなく、存在しない Base インスタンスを見つけています。
同じゲッターを新しいプロトタイプに割り当てる以外に、これを回避する方法はありますか?