是否有人知道该模式能够创建模块模式,但能够动态设置模块所在的名称空间。
所以不是下面的内容: -
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
MODULE可以设置为你喜欢的任何东西,我记得在屏幕录像中看到它完成但却记不起来......
基本上我想创建一个可以分配给实现者喜欢的任何命名空间的库。
答案 0 :(得分:0)
我认为你只能添加一个方法来设置它,并使MODULE
无效。
my.namespace = function( ns ) {
window[ns] = my;
window.MODULE = null;
}
然后:
window.MODULE.namespace( "myNamespace" );
window.MODULE; // null
window.myNamespace // object
或者你可以让它将模块返回到你想要的任何变量。
my.namespace = function() {
window.MODULE = null;
return my;
}
window.myNamespace = MODULE.namespace();
window.MODULE; // null
window.myNamespace // object
答案 1 :(得分:0)
现在有趣的是,我只是以这种方式建立了一个新的代码库。这就是我接近它的方式(但它取决于一个额外的全局变量):
// ability to rename namespace easily
var AXS_NS = 'App';
window[AXS_NS] = (function (app, $, Modernizr) {
app.config = {
debug: false
};
app.init = function() {
console.log('init');
};
return app;
})(window[AXS_NS] || {}, jQuery, Modernizr);
然后你可以这样做:
jQuery(function($){
App.init();
});
答案 2 :(得分:0)
我知道在原始问题之后还有很长的路要走。而且我不确定拥有动态命名的javascript对象的相关性。但是,以下模式允许您在html页面的script元素中设置对象命名空间名称,这是一种合理的方法。
像
这样的东西<script src="js/myscript.js" namespaceName="myObject"><script>
然后,您可以在javascript中调用myObject.hello()
。
使用此解决方案的示例javascript。
/**
* Dynamic mechanism for setting a javascript namespace.
*
* This works by adding the namespaceName as an attribute to the script
* element on your page. Something like
*
* **<script src="js/myscript.js" namespaceName="myObject"><script>**
*
* When the script has loaded it will have created a new javascript object
* with the nemespace name "myObject".
*
* You can now use myObject.hello() which returns "ns.hello() called"<br/>
*
* This works on later versions of chrome, firefox and ie.
*/
(function (ns) {
ns.hello = function () {
return "ns.hello() called";
}
} (window[document.getElementsByTagName('script')[document.getElementsByTagName('script').length-1].attributes['namespaceName'].value]=
window[document.getElementsByTagName('script')[document.getElementsByTagName('script').length-1].attributes['namespaceName'].value] || {}));
在 窗口[document.getElementsByTagName(&#39;脚本&#39;) [document.getElementsByTagName(&#39;脚本&#39)。长度-1] .attributes [&#39; namespaceName&#39]。值] 用于从脚本加载
中提取属性 namespaceName