class A
{
protected _value:number;
get value()
{
return this._value;
}
}
class B extends A
{
set value(v:number)
{
this._value = v;
}
}
var b = new B();
b.value = 2;
console.log(b.value);//undefined
如果子类只定义了setter,就无法获得值。
我想当Object.defineProperty" value"到B.prototype,覆盖"值" A.prototype上的getter setter。
答案 0 :(得分:5)
关于this accessors' restriction in this thread的讨论很长。
对于预期的行为,要么在超类中保留getter和setter:
class A
{
protected _value:number;
get value():number
{
return this._value;
}
set value(v:number)
{
this._value = v;
}
}
class B extends A
{
}
或者在子类上覆盖两者:
class A
{
protected _value:number;
get value():number
{
return this._value;
}
set value(v:number)
{
this._value = v;
}
}
class B extends A
{
get value():number
{
return this._value;
}
set value(v:number)
{
this._value = v;
}
}
如果你不使用访问者,而是使用常规方法,那么bahaviour就像预期一样:
class A
{
protected _value:number;
getvalue():number
{
return this._value;
}
}
class B extends A
{
setvalue(v:number)
{
this._value = v;
}
}
const b:B = new B();
b.setvalue(2);
console.log(b.getvalue());