我有一个模块的代码:
define(
[
"jquery",
],
function
(
$
)
{
this.someArray = []
this.someObject =
function(
someID
somePrivacyType
)
{
this.someID = someID;
this.somePrivacyType = somePrivacyType;
someArray[this.someID] = this;
};
return 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;
}
);
我想继续使用某种类型的
return this;
无需从模块本身内部声明命名空间。这种方式让我很容易通过在模块中声明私有(private)变量来保留私有(private)变量,但不是在 this
上。 .我知道我可以简单地从模块内声明命名空间,但这会脱离模块化。有什么方法可以从 RequireJS 中提取文件的命名空间或以其他方式返回
this
作为一个对象,它只会被调用它的命名空间引用?
最佳答案
我建议如下:
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
调用.我还假设您可以访问 someArray
在分配给 ns.someObject
的函数中旨在访问 someArray
在您的命名空间上,因此 ns.someArray
.根据命名空间的性质,您可能希望使用
Object.create(null)
创建它而不是 {}
. {}
当您有一组有限的键并且注意不要覆盖在 Object
上定义的方法时是可以的.如果没有,最好使用Object.create(null)
以免发生冲突。
关于javascript - RequireJS: "return this;"并且不是全局的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620507/