静态方法和导出的新类实例之间有什么不同

时间:2018-05-23 13:18:11

标签: javascript class ecmascript-6 static instance

拥有这2个代码片段。它们之间有什么区别,在什么情况下你更喜欢彼此?

export default class A {
    static methodA() {
        console.log('Method A');
    }
}

具有以下用途:

import A from 'a';

function test() {
    A.methodA()
}

VS第二个片段:

class A {
    methodA() {
        console.log('Method A');
    }
}

export default new A();

具有以下用途:

import A from 'a';//I know that semantically I should have import a - but for the sake of this question I wrote import A.

function test() {
    A.methodA();
}

2 个答案:

答案 0 :(得分:1)

真的不多。即使class是一个对象,所以在一种情况下,你有一个具有属性methodA的对象是一个函数,而在另一种情况下,你有一个具有属性{{1}的对象这是一个函数。

唯一的区别是,当methodA是一个类时你可以new A,但是当它已经是一个实例时你就不能这样做。

答案 1 :(得分:1)

第二种情况是所谓的单例模式,其中您定义了一个只有一个实例的类。您更喜欢哪一个主要取决于您的使用案例和个人品味。如果您对更多细节感兴趣,我建议您阅读单身人士和一般的设计模式。