JavaScript中的命名空间技术,推荐? 高性能? 需要注意的问题?
在我正在开发的一个项目中,我正在构建我的代码,如下所示
MyLib = {
AField:0,
ASubNamespace:{
AnotherField:"value",
AClass:function(param) {
this.classField = param;
this.classFunction = function(){
// stuff
}
}
},
AnotherClass:function(param) {
this.classField = param;
this.classFunction = function(){
// stuff
}
}
}
像这样做,像这样的东西:
var anInstance = new MyLib.ASubNamespace.AClass("A parameter.");
这是实现名称空间的正确途径吗? 是否有性能点击,如果是的话,有多激烈? 当我嵌套更深时,性能下降是否会叠加? 使用这种结构时,我应该注意哪些其他问题?
我关心每一点表现,因为它是一个实时图形库,所以我非常重视任何开销。
当您将代码构建为巨大的对象属性层次结构时,您有时会MyNamespaceObj.prop1
尚不可用于MyNamespaceObj.prop2
。 然后有一个事实是,你通常最终会在代码中输入完全限定的名字。
我开始发现我更喜欢做这样的事情:
MyNamespaceObj = (function () {
// lots of code/definitions that have local scope
var internallyDefinedItem1 = function (n) { /* ... */ }
var internallyDefinedItem2 = {
foo: internallyDefinedItem1(532),
bar: totallyPrivateNeverExportedFunction(17)
}
var totallyPrivateNeverExportedVar = 'blahblahblah';
function totallyPrivateNeverExportedFunction (x) {
/* ... */
}
return {
exportedItem1: internallyDefinedItem1,
exportedItem2: internallyDefinedItem2,
...
}
})();
我建议命名空间是编写可维护JavaScript的关键部分 - 特别是如果你与一个开发团队合作。
如果在生产过程中压缩/最小化代码,与命名空间相关的性能问题应该很小。
这里是讨论使用命名空间的替代方法。
命名空间对于避免潜在的冲突和覆盖是至关重要的。 当你的JS会在外部JS也可以驻留的外部环境中登陆时,情况就是如此。
这就是说,由于命名空间的原因,性能会受到影响,因为解释器现在必须遵循更长的链才能访问所需的函数/属性。
例如,类似的东西
var myProperty;
访问速度要快一些:
myNameSpace.module1.myProperty;
我认为速度的差别并不大,除非你的命名空间非常深,避免潜在冲突的好处是命名空间的一大优点。
但是,仍然需要牢记这个问题。
链接地址: http://www.djcxy.com/p/2791.html上一篇: Namespacing technique in JavaScript, recommended? performant? issues to be aware of?