我正在使用最新的RequireJS创建一个Javascript项目。我正在定义一个ChessWorker模块,如下所示:
var worker;
define("chessWorker", ["jquery", "messageListener"], function($, listener) {
if (worker) {
return worker;
} else {
$.ajax({
url: "...",
success: function(data) {
worker = new Worker(window.URL.createObjectURL(new window.Blob([data])));
worker.onmessage = listener
worker.error = function(e) {
...
};
return worker;
}
});
}
});
这是不好的做法吗?如果是这样,我应该如何定义呢?是否有关于单身人士的标准定义方式?
worker
确实不建议您定义为全局变量,而应使用闭包代替:
define(function(){
var instance = null;
function MySingleton(){
if(instance !== null){
throw new Error("Cannot instantiate more than one MySingleton, use MySingleton.getInstance()");
}
this.initialize();
}
MySingleton.prototype = {
initialize: function(){
// summary:
// Initializes the singleton.
this.foo = 0;
this.bar = 1;
}
};
MySingleton.getInstance = function(){
// summary:
// Gets an instance of the singleton. It is better to use
if(instance === null){
instance = new MySingleton();
}
return instance;
};
return MySingleton.getInstance();
});
注意:另外,请确保您的ajax调用是同步的,或者在您需要chessWorker
模块时将获得null
响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句