从基类构造函数访问子构造函数

时间:2017-08-23 10:21:00

标签: javascript ecmascript-6

给定以下类层次结构:ChildClass扩展ParentClass,是否可以从ChildClass构造函数访问ParentClass构造函数?例如:

class ChildClass extends ParentClass
{
    constructor()
    {
        super()
    }
}

ChildClass.prop = 'prop'

class ParentClass
{
    constructor()
    {
        if (this._child().prop == 'prop') // here
        {
            console.log("All ok");
        }
    }

    get _child()
    {
        return this.constructor;
    }
}

换句话说,我正在尝试做的是访问孩子的'静态'属性以进行验证

2 个答案:

答案 0 :(得分:5)

  

是否可以从ParentClass构造函数访问ChildClass构造函数?

每个孩子都是父母,但不是每个孩子都是孩子。

没有。你不能。即使可能使用一些脏代码,也不要这样做。重新思考你的设计。在继承链中,每个Child都应该继承Parent的属性。不相反。

想想有3个孩子,你会得到哪些孩子的道具?长号。

答案 1 :(得分:2)

应该是this._child而不是this._child(),因为child是属性访问者,而不是方法:

class ParentClass
{
    constructor()
    {
        if (this._child.prop == 'prop')
        {
            console.log("All ok");
        }
    }

    get _child()
    {
        return this.constructor;
    }
}

_child吸气剂是多余的,具有误导性。通常直接使用this.constructor

class ParentClass
{
    constructor()
    {
        if (this.constructor.prop == 'prop')
        {
            console.log("All ok");
        }
    }
}

在父类中引用'child'在语义上是不正确的(父级不会也不应该'知道'其子级,_child可以是父级本身),但是引用{{1不是。