2016-09-16 49 views
8

我看到这种模式,这些天实施的NodeJS,在那里我们有我的模块下面的代码:ES6类和module.exports

class Foo { 
    bar() { 
    console.log('bar'); 
    } 
} 
module.exports = Foo; 

然后当我做了要求,最后说,新的创造类的一个实例。

var Foo = require(./foo); 
var myFoo = new Foo(); 
myFoo.bar(); 

根据我的这种模式将不断创建类Foo的多个实例,每次调用它。

其他模式可能是什么,我用我的foo.js会在哪里。

module.exports = { 
    bar: function() { 
    console.log('bar'); 
    } 
}; 

然后我只需要和打电话给酒吧。

var foo = require(./foo); 
foo.bar(); 

问题会这两个表现相同吗?第二种模式是否会在我需要的时候继续创建对象并在对象上调用bar?

,因为我们在其他语言中使用也没有创造Singleton模式的情况下,1个好主意,其中我们继续,如果它已经创建一次服务于同一个实例?

+0

您正在使用ES6,所以请确定,很少有浏览器支持此功能。 –

+0

目的是在nodeJS中运行,而不是在浏览器中运行。 –

回答

8

根据我的这种模式将不断创建Foo类的多个实例,每当它被调用时。

是的,这就是目的。虽然new Foo();只在您的示例中执行一次。

将两个相同的行为?

将在第二图案保持创建对象每次我需要和对象上调用吧?

编号require()调用被缓存,它们每次都返回相同的模块。

也没有创造单例模式是一个好主意?

不,如果它包含任何状态,单身很少是个好主意。你的例子没有,但是他们通常在Node.js中使用class es。