通过require.js导出新对象时:它实际上是创建“新”对象还是仅返回现有实例

时间:2014-01-19 15:37:01

标签: javascript module singleton requirejs

假设我在require.js中有模块A,B和C.模块A导出新对象。

define(function() {

    // constructor
    function F() {
        this.prop = 'some';
    }

    // module exports
    return new F();   

});

模块B和C从A:

导入F()的实例
define(['A'], function(f_inst) {
    // code
});

出于某种原因,我需要F成为单身人士。我还没有认真了解require.js的工作原理。所以,这是我的问题:在这种情况下,我是否需要为F()使用单例模式?

1 个答案:

答案 0 :(得分:5)

AMD模块define d,只有一次。即使您需要多次,也只会评估一次。

您可以查看此示例:

<强> F.js

define(function() {

    // constructor
    function F() {
        this.prop = 'some';
    }

    // module exports
    console.log('evaluated!');
    return new F();   

});

<强> A.js

define(['./F'], function(F) {
    return 'A';
});

<强> B.js

define(['./F'], function(F) {
    return 'B';
});

<强> main.js

require(['./A', './B'], function(A, B) {
    console.log(A, B);
});

<强>的index.html

<!doctype html>
<html>
    <head>
    </head>
    <body>
        <script data-main="main" src="require.js"></script>
    </body>
</html>

'已评估'消息仅打印一次。