Javascript 在没有singelton模式的情况下通过requirejs共享原型实例?

Javascript 在没有singelton模式的情况下通过requirejs共享原型实例?,javascript,singleton,instance,requirejs,amd,Javascript,Singleton,Instance,Requirejs,Amd,我有一个处理沙盒的中介对象 每个沙箱都必须在中介处注册。因为我也使用了requirejs,这是一个小问题,因为我不知道如何共享实例而不是原型: mediator.js define([], function() { var Mediator = function() {}; Mediator.prototype.start = function() {}; Mediator.prototype.stop = function() {}; Mediator.prot

我有一个处理沙盒的中介对象

每个沙箱都必须在中介处注册。因为我也使用了requirejs,这是一个小问题,因为我不知道如何共享实例而不是原型:

mediator.js

define([], function() {
    var Mediator = function() {};
    Mediator.prototype.start = function() {};
    Mediator.prototype.stop = function() {};
    Mediator.prototype.register = function() {};
    Mediator.prototype.unregister = function() {};
    return Mediator;
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxOne', SandboxObject);
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxtwo', SandboxObject);
});
sandbox\u one.js

define([], function() {
    var Mediator = function() {};
    Mediator.prototype.start = function() {};
    Mediator.prototype.stop = function() {};
    Mediator.prototype.register = function() {};
    Mediator.prototype.unregister = function() {};
    return Mediator;
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxOne', SandboxObject);
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxtwo', SandboxObject);
});
sandbox_two.js

define([], function() {
    var Mediator = function() {};
    Mediator.prototype.start = function() {};
    Mediator.prototype.stop = function() {};
    Mediator.prototype.register = function() {};
    Mediator.prototype.unregister = function() {};
    return Mediator;
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxOne', SandboxObject);
});
define(['mediator'], function(Mediator) {
    var mediator = new Mediator();
    mediator.register('sandboxtwo', SandboxObject);
});
正如您在当前方法中提到的,我在两个不同的中介中注册了沙盒。解决这个问题的一个想法是使用单例模式,但这与体系结构和requirejs建议相冲突


那么,还有什么其他方法可以让沙盒注册到同一个Mediator实例呢?

既然我不能发表评论,我将发布一个答案

ggozad在这里解释了如何在RequireJS中实现单例:

他的代码:

define(function (require) {
    var singleton = function () {
        return {
            ...
        };
    };
    return singleton();
});

实际上,使用RequireJS您已经收到了单身人士,因此如果您拨打:

require(['mediator'],函数(mediator){
....
});
Mediator
将始终是同一个对象。如果它是一个构造函数,那么通过调用
new Mediator()
您将始终创建一个新实例,但每次都将使用相同的函数

但您不必返回函数:

定义([],函数(){
返回{
开始:函数(){},
停止:函数(){},
寄存器:函数(){},
取消注册:函数(){}
};
});
现在,您的
中介将是一个实例,而不是一个函数,您不能将其用作函数。您现在看到的示例如下所示:

require(['mediator'],函数(mediator){
register('sandboxOne',SandboxObject);
});

免责声明:我使用的是RequireJS版本内置于Dojo

你能再解释一下吗?如果您在任何地方都使用同一个实例,那么不管您如何调用它,您都将拥有一个单例?没有理由使用该
singleton
函数-只需返回对象即可literal@ZenMaster:您已经有了
define
..@berginope的匿名函数。我指的是匿名函数中的作用域。单例的默认值(起始值)。