JavaScript ES6 - 父类中的静态方法返回在子类中设置的值



>我有这个类结构:

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.

有什么帮助吗?谢谢!!

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

getName() { return this.__name; }

进一步解释

你必须考虑到JS不是基于类的,而是基于原型的OOP语言,在ES6声明"静态"函数作为构造函数的属性之前

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

所以在一个"静态"函数中,这就是构造函数。

更新

如果你必须使用静态方法,你可以编写一个访问器函数,如

class Component {
static getName(instance) {
return instance._name;
}
}

然后将其用作

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

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

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

最新更新