[英]javascript es6 module variable vs static
假设我们有这两个类,假设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 };
好吧,在Sample1中暴露了doSomething
,您可以使用Sample1.doSomething()
访问它,但在Sample2场景中,该方法在模块范围之外不可用,所以它是私有的。
现在,关于内存消耗,无论你创建多少个实例,它都被分配一次静态方法,并且只能通过类访问,而不能通过实例访问。
你能理解这个吗?
唯一的区别是可测试性。 当函数作为Sample1.doSomething(x)
类的方法调用时,它可以在测试期间进行间谍或存根。
一种更可扩展的方法是引用像this.constructor.doSomething(x)
这样的静态方法。 在这种情况下,该方法可以在子类中扩展。
如果该方法仅在类实例中使用并且从未被调用为静态(如在React组件中),则将其设置为静态是没有意义的。 它可以定义为原型方法,并像这样调用this.doSomething(x)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.