为什么不能吸得超类的属性[打字稿]
问题描述:
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
不能得到值,如果子类仅仅只定义制定者。
我想当Object.defineProperty“value”为B.prototype时,覆盖A.prototype上的“value”getter setter。
答
关于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());
谢谢你的回答。在其他语言中,如果子类没有一些功能,超类功能将被调用。但打字稿not.i只是混淆了这一点。 – Sxd