zoukankan      html  css  js  c++  java
  • javascript优化--06模式(对象)01

    命名空间:

    • 优点:可以解决命名混乱和第三方冲突;
    • 缺点:长嵌套导致更长的查询时间;更多的字符;
    • 通用命名空间函数:
      var MYAPP = MYAPP || {};
      MYAPP.namespace = function (ns_string) {
          var parts = ns_string.split('.');
          parent = MYAPP;
        
          if(parts[0] === 'MYAPP') {
              parts = parts.slice(1);
         }
         for(var  i = 0; i < parts.length; i++) {
            if(typeof parent[parts[i]] === 'undefined') {
                parent[parts[i]]  = {};
            }
             parent = parent[parts[i]];
         }
         return parent;
      }
      var module2 = MYAPP.namespace('MYAPP.modules.module2');

    声明依赖关系:虽然已经进行了模块化命名,但再声明依赖能更优化

    如对于:MYAPP, MYAPP.util.Event, MYAPP.util.Dom;
    //在一个函数或模块顶部进行声明
    
    var  myFunc = function() {
       var event = MYAPP.util.Event;
       var dom = MYAPP.util.Dom;
    ................
    } 
    

    解析局部变量的速度比解析全局变量快;

    私有属性:

    • 私有属性和特权方法:构造函数方法
      function Gadget() {
         var name = 'iPod';
         this.getName = function () {
              return name;
         }
      }
      

      注意,如果私有属性设置是一个对象,且只读,那么不要将它直接返回,而是返回其浅复制后的副本;  

    • 私有属性:对象/匿名即时调用函数
      var myobj = (function () {
         var name = 'my';
         return {
            getName: function () {
                 return name; 
             }
         }
      }());
      
      myobj.getName();
    • 私有属性:原型   如果是所有创建对象都需要的私有属性,可以设置到原型中
      Gadget.prototype = (function () {
         var browser = 'Mobile Webkit';
         return {
              getBrowser: function () {
                   return browser; 
              }
         }
      })

    模块模式:

    • 组合:
      • 命名空间
      • 即时函数
      • 私有和特权成员
      • 声明依赖
    • 例子
      var MYAPP = {};
      MYAPP.namespace = function (ns_string) {
          var parts = ns_string.split('.');
          parent = MYAPP;
        
          if(parts[0] === 'MYAPP') {
              parts = parts.slice(1);
         }
         for(var  i = 0; i < parts.length; i++) {
            if(typeof parent[parts[i]] === 'undefined') {
                parent[parts[i]]  = {};
            }
             parent = parent[parts[i]];
         }
         return parent;
      };
      MYAPP.namespace('MYAPP.utilities.array');
      MYAPP.utilities.array = (function () {
      	   //依赖
         var uobj = MYAPP.utilities.object,
         	   ulang = MYAPP.utilities.lang,
         	   //私有属性
         	   array_string= '[object Array]',
         	   ops = Object.prototype.toString,
         	   //...
         	   //私有方法
             inArray =  function (needle, haystack) {
         		for(var i = 0, max = haystack.length; i < max; i++) {
         			if(haystack[i] === needle) {
         				return true;
         			}
         		 }
         	   },
         	   isArray = function (a) {
         		return ops.call(a) === array_string;
         	   };
      
         //可选的一次性初始化过程
      
         //公有API
         return {
         	inArray:inArray,
         	isArray:isArray,
         	//...
         }
      })();
    • 例子:使用构造函数
      MYAPP.namespace('MYAPP.utilities.Array');
      MYAPP.utilities.Array = (function () {
      	   //依赖
         var uobj = MYAPP.utilities.object,
         	   ulang = MYAPP.utilities.lang,
         	   //私有属性和方法
         	   Constr;
      
         //可选的一次性初始化过程
         //....
      
         //公有API-构造函数
         Constr = function(o) {
         	 this.elements = this.toArray(o);
         };
         //公有API-原型
         Constr.prototype = {
         	constructor: MYAPP.utilities.Array,
         	version: '2.0',
         	toArray: function (obj) {
         		for (var i = 0, a = [], len = obj.length; i < len; i++) {
         			a[i] = obj[i];
         		}
         		return a;
         	}
         }
         //返回要配置给新空间的构造函数
         return Constr;
      })();
      var arr = new MYAPP.utilities.Array(['a','b']);
    • 将全局变量导入模块中
      MYAPP.utilities.module = (function (app, global) {})(MYAPP, this);
      

        

  • 相关阅读:
    收集珠子
    压缩变换(程序设计)
    动态规划-树上dp-1757. 搜集钻石
    动态规划-1620. 收集硬币
    动态规划-状态压缩-707. 最优账户结余
    图-1400. 图的费马点
    数学-快速幂
    计算几何-5361. 圆和矩形是否有重叠
    图-搜索-dfs-739. 24点
    图-dfs-连通分量-旋转变换-804. 不同岛屿的数量II
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4155238.html
Copyright © 2011-2022 走看看