【发布时间】:2011-08-27 17:39:15
【问题描述】:
// 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 实例。
除了必须将相同的 getter 分配到新原型上之外,还有其他方法吗?
【问题讨论】:
-
我知道这不能回答你的问题......但你为什么还需要吸气剂?这不是不必要的复杂性吗?
-
@Michael 好吧,在这个例子中,显然没有必要,我写它只是为了让我清楚地了解我面临的问题。在我的实际应用中,在获取/设置某些属性时,我需要触发其他函数和代码。
标签: javascript setter getter prototype-programming extending