Javascript 在没有singelton模式的情况下通过requirejs共享原型实例?
我有一个处理沙盒的中介对象 每个沙箱都必须在中介处注册。因为我也使用了requirejs,这是一个小问题,因为我不知道如何共享实例而不是原型: mediator.jsJavascript 在没有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
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的匿名函数。我指的是匿名函数中的作用域。单例的默认值(起始值)。