繁体   English   中英

javascript es6模块变量vs静态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM