>我有这个类结构:
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