假设我们有这两个类,假设doSomething
不需要this
访问权限,在模块范围中使用函数与作为静态类函数有什么不同。我能看到的唯一区别是,模块“更私密”,还有其他什么吗?
Sample1.js
class Sample1 extends React.Component {
static doSomething(input) {
// ...
return input2;
}
render() {
if (Sample1.doSomething(x)) {
return <div />;
}
return null;
}
}
export { Sample1 };
Sample2.js
const doSomething = (input) => {
// ...
return input2;
};
class Sample2 extends React.Component {
render() {
if (doSomething(x)) {
return <div />;
}
return null;
}
}
export { Sample2 };
答案 0 :(得分:2)
好吧,在Sample1 doSomething
中,您可以使用Sample1.doSomething()
访问它,但在Sample2场景中,该方法在模块范围之外不可用,所以它是私有的。< / p>
现在,关于内存消耗,无论你创建多少个实例,它都被分配一次静态方法,并且只能通过类访问,而不能通过实例访问。
这对你有意义吗?
答案 1 :(得分:0)
唯一的区别是可测试性。当函数作为Sample1.doSomething(x)
之类的方法调用时,它可以在测试期间进行间谍或存根。
更可扩展的方法是引用静态方法,如this.constructor.doSomething(x)
。在这种情况下,该方法可以在子类中扩展。
如果该方法仅在类实例中使用并且从未被调用为静态(如在React组件中),则将其设置为静态是没有意义的。它可以定义为原型方法,并被称为this.doSomething(x)
。