代码是这个样子的
var STK = (function() {
var that = {};
var errorList = [];
var ns='data1.data2.data3'
that.register = function(ns, maker) {
var NSList = ns.split('.');
var step = that;
var k = null;
while (k = NSList.shift()) {
if (NSList.length) {
if (step[k] === undefined) {
step[k] = {};
}
step = step[k];
}
}
};
that.register(ns);
// return that;
})();
怎么滴that 的结果就变成这样子了啊。。。这个while 循环看不懂啊
var STK = (function() {
var that = {};
var errorList = [];
var ns = 'data1.data2.data3'
that.register = function(ns, maker) {
var NSList = ns.split('.');
// NSList = ["data1", "data2", "data3"]
var step = that; // step 当前指向 that,也就是根 ns
var k = null; // k = NSList.shift() 表示每一层 ns 的名称
while (k = NSList.shift()) { // 每次循环判断如果 k 有值就进入循环体
// shift 之后 NSList 是去掉第1个元素之后剩下的
// 所以如果 NSList.length 为 0 (此时判为 false) 表示没其它元素了
if (NSList.length) {
// 只要还有元素,就将当前 ns 名称作为上个 ns 的属性,其值是 {}
// 如果已经存在这个属性了就拉倒
if (step[k] === undefined) {
step[k] = {};
}
// 改变 step 指向的 ns(相当于下移一层)
step = step[k];
}
// 没有 else,所以最后一层名称被丢弃了
// 估计是当类名之类的,不属于命名空间了
}
// 循环完了连起来就是
// that.data1.data2
};
that.register(ns);
// return that;
})();