/*
Package("hr.common.service"); hr.common.service = {}; */ //上面的原理是 Package("hr.common.service");给window对象添加hr对象给hr对象添加common对象给common对象添加service对象 //hr.common.service = {}; 原理window.hr.common.service = {};//重写window对象 window可以省去(这样重写就是单利模式 已经是实例不用new) //hr.common.service = function(){};//这样是给window.hr.common.service负值一个函数对象可以用new出对象 var ctx="/shihua-hr";//项目的根路径 var coreEnvironment = { namespace_root: window, //原理 Package("com.xsq.User");=== window.com.xsq.User其实就是在window中创建com对象在com对象中创建xsq对象一次下去(注意事项主要是最后一个对象不能重复) Package: function(ns){ var parent = coreEnvironment.namespace_root; var ns_a = ns.split('.');//对象名数组 for (var i = 0, j = ns_a.length; i < j; i++) { if (!parent[ns_a[i]]) {//如果存在对象中没有这个对象就创建 parent[ns_a[i]] = {}; } else if (i == j - 1 && parent[ns_a[i]]) {//如果最后一个对象已经存在说明有重复对象 try { console.log("namespace [ " + ns + " ] is exist!");//在控制台输出 }catch(e){ } return; } parent = parent[ns_a[i]];//替换到最后一个引用 下一次循环的时候负值的时候确保是最后一个对象 } }, clone: function(obj){//克隆 function F(){// }; F.prototype = obj; return new F; }, extend: function(subClass, superClass){ var F = function(){ }; F.prototype = superClass.prototype;//保存父类的结构 subClass.prototype = new F();//添加到子类的结构(如果子类结构中存在已有的属性则利用子类的) subClass.prototype.constructor = subClass;//加入类型兼容父亲 主要用于typeOf() subClass.superclass = superClass.prototype;//加入父类引用 if (superClass.prototype.constructor == Object.prototype.constructor) {//如果父类对象的构造方法是object的(处理array等类型) superClass.prototype.constructor = superClass;//这样得到真实的对象类型 } } };
//()代表包装成对象()();所以就是调用方法
//所以这样是初始化window对象 (function(){ window.Package = coreEnvironment.Package; window.clone = coreEnvironment.clone; })(); |
javascript 包机制
最新推荐文章于 2024-05-22 12:28:52 发布