【发布时间】:2013-06-13 09:16:53
【问题描述】:
在一些现有的基于 Dojo 的应用程序中,我看到一个使用单例模式的模块:
define([...], function(...) {
var MyClass = declare(...);
if (!_instance) {
var _instance = new MyClass();
}
return _instance;
});
但如果我对 AMD 的理解正确的话,_instance 的使用不是必需的,因为传递给 define(...) 调用的函数应该只执行一次......或者不应该?
我对AMD loader的理解是,通过调用“require”或“define”获取模块时,会检查模块是否已经被加载。如果还没有加载,就会加载JS,执行传递给“define”的函数,内部存储返回值。如果它已经被加载,它将简单地返回之前存储的值。
我的假设是否正确?如果是这样,在编写模块时,我们可以放心地假设给定的模块只会被加载和执行一次,并且我们不需要执行任何检查来查看某些内容是否已经初始化,从而使代码更简单。
谢谢。
【问题讨论】:
-
您的假设是正确的,该代码假设主体可能会再次运行,这是完全错误的。请问你在哪里看到的,如果它是在 dojo/dijit 代码中,而不是如果它是你自己的/生产代码当然。
-
不,那不是 Dojo/Dijit 代码,它是某个同事编写的基于 dojo 的应用程序。我会让他知道他的代码是多余的,非常感谢您的确认。
标签: javascript dojo amd