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);
      

        

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4155238.html
Copyright © 2011-2022 走看看