JavaScript ES6 - 父类中的静态方法返回child中的值集

时间:2018-05-16 14:05:21

标签: javascript oop ecmascript-6 static

我有这个类结构:

class Component{
    constructor(name){
        this.__name = name;
    }

    static getName() { return this.__name; }
}   

class ComponentChild extends Component{
    constructor(){
        super("myName");
    }
}

当我打电话

console.log(ComponentChild.getName);

我希望myName

相反,我得到undefined

有任何帮助吗?谢谢!

2 个答案:

答案 0 :(得分:2)

在OOP中,静态属性和函数属于它们声明的类,因此它们无权访问实例属性或函数,因此您需要使该函数非静态。

getName() { return this.__name; }

进一步说明

在ES6宣布"静态"之前,您必须考虑到JS不是基于类的,而是基于原型的OOP语言。函数是作为构造函数的一个属性完成的:

function Component(name) {
     // ctor logic
}

Component.getName = function(){ 
     // fn logic 
}

所以在"静态"函数你的这个是构造函数。

<强>更新

如果你必须使用静态方法,你可以编写一个像

这样的访问函数
class Component {
    static getName(instance) {
        return instance._name;
    }
}

然后将其用作

console.log(Component.getName(instance));

答案 1 :(得分:1)

您无法在静态函数中使用this来引用实例。静态函数是静态的,因为你在类本身而不是实例上调用它们;因此,他们无法访问实例成员。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static