Javascript RequireJS:“;归还这个&引用;而且它不是全球性的
我有一个模块的代码:Javascript RequireJS:“;归还这个&引用;而且它不是全球性的,javascript,module,namespaces,dependencies,requirejs,Javascript,Module,Namespaces,Dependencies,Requirejs,我有一个模块的代码: define( [ "jquery", ], function ( $ ) { this.someArray = [] this.someObject = function( someID somePrivacyType
define(
[
"jquery",
],
function
(
$
)
{
this.someArray = []
this.someObject =
function(
someID
somePrivacyType
)
{
this.someID = someID;
this.somePrivacyType = somePrivacyType;
someArray[this.someID] = this;
};
return this;
}
);
我想使用另一个模块的名称空间访问上面的模块,但是使用返回这个代码>抛出全局命名空间中的所有内容
像这样:
define(
[
"jquery",
"myProject/SomeModule"
],
function
(
$,
SomeModule
)
{
console.log(SomeModule); //Returns window
//someArray is in the global namespace rather than only
console.log(someArray); //Returns someArray (Want it to return undefined)
//on the SomeModule namespace below
console.log(SomeModule.someArray); //Returns someArray (Want only this to return Array)
console.log(SomeModule.someObject);
return this;
}
);
我想继续使用某种类型的返回这个代码>而不必从模块本身中声明名称空间。通过这种方式,我可以很容易地通过在模块中声明私有变量来保留它们,但不能在This
上声明它们。我知道我可以简单地从模块内声明名称空间,但这会剥夺模块性。
是否有任何方法可以从RequireJS中提取文件的名称空间,或者以其他方式返回此
作为一个对象,该对象将仅由调用它的名称空间引用?我建议如下:
define(["jquery"], function ($) {
var ns = {}; // Create our namespace.
ns.someArray = [];
ns.someObject = function(someID, somePrivacyType) {
this.someID = someID;
this.somePrivacyType = somePrivacyType;
ns.someArray[this.someID] = this;
};
return ns;
});
我假设ns.someObject
是用new
调用的。我还假设您在分配给ns.someObject
的函数中访问someArray
是为了访问命名空间上的someArray
,因此ns.someArray
根据命名空间的性质,您可能希望使用Object.create(null)
来创建它,而不是{}
<代码>{}
如果您有一组有限的键,并且注意不要覆盖在对象上定义的方法,则可以。如果没有,最好使用Object.create(null)
来避免冲突。Awesome非常有效,所有假设都是正确的。。。我想如果我做了类似namespace.object的事情,我就必须做someModule.namespace.object,或者显式地将someModule命名为名称空间。结果证明那不是真的:D。。。谢谢