var namespaced = {
A: function(){
function r(){
//do some stuff
return something;
}
var someProperty = 5;
function j(){
//do some more stuff
return something;
}
},
B: function(){
//can I call A and C?
A.r();
C.d();
},
C: function(){
function d() {
//do stuff we like
}
}
}
然后我可以做...
namespaced.A.j();
namespaced.C.d();
something = namespaced.A.someProperty;
对吗?
我也需要这样做吗?
var something = new namespaced.A()?
如果是这样,A() 是否有构造函数?我在这里真的很困惑:{
我正在尝试封装我的 javascript 以便于维护
最佳答案
Then I could do...
namespaced.A.j(); namespaced.C.d(); something = namespaced.A.someProperty;
不,你不能。函数 j
和 someProperty
仅在 A
本地,不会传播到外部。如果你想从外部访问它们,你必须使它们成为函数的属性,使用 this
:
var namespaced = {
A: function(){
this.r = function(){
//do some stuff
return something;
};
this.someProperty = 5;
this.j = function(){
//do some more stuff
return something;
};
}
}
但您仍然需要调用 var a = new namespaced.A()
才能访问这些函数。
如果您想直接调用 namespaced.A.j()
,您必须将 A
声明为对象,而不是函数:
var namespaced = {
A: {
r: function(){
//do some stuff
return something;
},
someProperty: 5,
j: function(){
//do some more stuff
return something;
}
}
}
所以这取决于你最终想要实现什么......为了更好地了解这些方法,我推荐JavaScript Patterns .
关于javascript - 这是用于制作将各种方法封装到不同对象中的命名空间的正确 javascript 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328704/