gpt4 book ai didi

typescript - 为什么无法通过 getter [typescript] 获取父类(super class)的属性

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:21 25 4
gpt4 key购买 nike

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

Playground

如果子类只定义 setter,则无法获取值。

我想当 Object.defineProperty“值”到 B.prototype 时,覆盖 A.prototype 上的“值”getter setter。

最佳答案

关于this accessors' restriction in this thread的讨论很长.

对于预期的行为,要么在父类(super class)中同时保留 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;
}

}

如果您不使用accessors,而是使用普通方法,则行为符合预期:

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());

关于typescript - 为什么无法通过 getter [typescript] 获取父类(super class)的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38717725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com