ext源码分析之namespace

namespace : function(){
            var o, d;
            Ext.each(arguments, function(v) {
                d = v.split(".");
                o = window[d[0]] = window[d[0]] || {};
                Ext.each(d.slice(1), function(v2){
                    o = o[v2] = o[v2] || {};
                });
            });
            return o;
        }

split 根据切割点返回数组类型 如果没有这个切割点 就返回一个包含它本身的数组

"ss".split("fdgf"); // [ss]

o = window[d[0]] = window[d[0]] || {};
window[d[0]] 肯定是undefined 但和{} 一或之后就是一个{}了也就是一个对象了
于是就可以使用d[0]了
o =window["ss"] = window["ss"] || “我是空对象";
alert(ss)  // 我是空对象

alert(["sss","ccc","fff"].slice(1));  //ccc,fff
alert( Object.prototype.toString.apply(["sss","ccc","fff"].slice(1)));
// [object array]

"aa.bb.cc" 为字符串 只循环一次
首先把aa注册进去,于是有了window.aa再进入内循环 此时数组参数为["bb","cc"]
v2为第一个参数array[i] 见我的each分析
在内循环里 o =window.aa.bb = {}
         然后o = window.aa.bb.cc = {}
返回了aa.bb.cc
于是一共注册了 aa  aa.bb  aa.bb.cc





你可能感兴趣的:(prototype,ext)