为什么不能通过getter [typescript]获得超类的属性

时间:2016-08-02 10:18:32

标签: typescript

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" value"到B.prototype,覆盖"值" A.prototype上的getter setter。

1 个答案:

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