2010-10-31 68 views
1

模仿jQuery等命名空间的JavaScript框架是否会进行一些名称空间冲突检测?如果不是我应该自己管理它?JavaScript中的“命名空间”碰撞检测?

如果是的话阻止这样的框架自己检测到这种冲突?

+0

我没有时间自己解释这个,但看看Paul Irish的视频[我从jQuery资源中学到的10件事](http://www.youtube.com/watch?v=i_qE1iAmjFg #t = 12m35)他在那里谈论'noConflict'。另请参阅他的[自己的博客](http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/)以获取更多链接和评论。 – 2010-10-31 13:28:38

+0

非常感谢,那就是我一直在寻找的。 – user310291 2010-10-31 19:36:55

回答

5

JavaScript的命名空间通常是通过使用对象和封闭模仿,并经常与自我调用函数初始化:

var myNamespace = (function() { 
    var _name = 'Bob'; 

    return { 
     somePublicMethod: function() { 
     return 'Hello, ' + _name; 
     } 
    }; 
})(); 

alert(myNamespace.somePublicMethod()); 

不幸的是,如果你重新定义命名空间的变量,有针对任何警告。什么,你可以真正做的是检查是否命名空间变量已被定义,并抛出一个异常或引发错误,如果它是:

if (typeof myNamespace !== 'undefined') { 
    var myNamespace = (function() { 
     // ... 
    })(); 
} 
else { 
    throw new Error("Whoops! myNamespace already exists."); 
} 
+0

'!========'? :) – galambalazs 2010-10-31 12:45:43

+0

@ galambalazs:lol :)修正:) – 2010-10-31 12:46:33

+0

这不是真的倒退吗?你不检查命名空间==='undefined'然后定义它,否则抛出一个错误? – kakridge 2012-08-09 14:28:31

1

考虑未来与发展标准,其中整个团队如何你同意将调用你的名字空间。另外,我发现在实际实现它们之前查看数据结构或命名空间的任何更改都很有用。

+0

但是,如果你的框架像jquery一样分布在世界各地,这是不可能的。 – user310291 2010-10-31 19:34:58