javascript 包机制

/*
  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;
})();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值