javascript es6模块变量vs静态

时间:2018-01-11 00:23:31

标签: javascript reactjs ecmascript-6

假设我们有这两个类,假设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 };

2 个答案:

答案 0 :(得分:2)

好吧,在Sample1 doSomething中,您可以使用Sample1.doSomething()访问它,但在Sample2场景中,该方法在模块范围之外不可用,所以它是私有的。< / p>

现在,关于内存消耗,无论你创建多少个实例,它都被分配一次静态方法,并且只能通过类访问,而不能通过实例访问。

这对你有意义吗?

答案 1 :(得分:0)

唯一的区别是可测试性。当函数作为Sample1.doSomething(x)之类的方法调用时,它可以在测试期间进行间谍或存根。

更可扩展的方法是引用静态方法,如this.constructor.doSomething(x)。在这种情况下,该方法可以在子类中扩展。

如果该方法仅在类实例中使用并且从未被调用为静态(如在React组件中),则将其设置为静态是没有意义的。它可以定义为原型方法,并被称为this.doSomething(x)