我一直在阅读人力车图表库的源代码,发现了这个片段:
var Rickshaw = {
namespace: function(namespace, obj) {
var parts = namespace.split('.');
var parent = Rickshaw;
for(var i = 1, length = parts.length; i < length; i++) {
var currentPart = parts[i];
parent[currentPart] = parent[currentPart] || {};
parent = parent[currentPart];
}
return parent;
},
...
现在我明白这是命名空间的对象文字符号。
稍后,当定义单个“模块”时,将使用以下语法:
Rickshaw.namespace('Rickshaw.Graph');
Rickshaw.Graph = function(args) {
...
有人可以向我解释这里发生了什么。namespace
当只写以下内容完全合法时,为什么他们需要一个函数?:
Rickshaw.Graph = function(args) {
...
如果我不得不下注,我猜是这样我们可以定义如下内容:
Rickshaw.Something.AnotherThing
不用担心我们是否已经定义Rickshaw.Something
了。
这是好习惯吗,普遍吗?