我有这个类结构:
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
。
有任何帮助吗?谢谢!
答案 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