• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > 利用js的闭包原理做对象封装及调用方法

利用js的闭包原理做对象封装及调用方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了js闭包原理,js闭包是什么,js闭包函数,js闭包,js闭包实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

创建一个js文件,名为testClosure.js:

(function () {
  function a()
  {
    alert('i am a');
  }
  outFunc = function () {
    a();
  }
})();
</div>

这里不论写多少个function,a b c d ...外面都调用不到,包括这里面var定义的变量也都调用不到,那么你在里面尽情的写,就不用担心这些函数名变量名跟外界冲突;

只需要暴露一个outFunc这个函数供外界调用。这个函数呢没有用var定义,就变成一个全局变量,外界就可以调用的到,利用这一点,让这个函数变成匿名函数和外界沟通的桥梁。

再利用js面向对象的方法,就可以封装出非常好用的组件。

示例一:不需要继承的js组件

(function()
{
  var arrAuthItem = new Array();
  var isInited = false;
  var syncTableObj=findObj("sync-table-id",document);

  var newTR=null;
 var checkBox=null;
 var authTable = null;
 var selfPicUrl=null;
 var selfItem=null;

 var isAuthItemEnabled=false;
  var isSelfItemEnabled=false;

  function getAuthShopCurrent()
  {
   return $("#"+globalSyncVars.serverComClientId.AuthShopListId).val();
  }

  function getSyncFieldCurrent()
  {
   return $("#"+globalSyncVars.serverComClientId.SyncFieldListId).val();
  }
  
  function setTitle()
  {
   $("#sync-table-title-id").html("从“"+getAuthShopCurrent()+"”同步");
  }

  function getNumIidFrom(numIidTo)
  {
     var curRowData = jQuery("#listItemDefine").jqGrid('getRowData', numIidTo);
     return curRowData.NumIidFrom;
  }

  function insertRows()
  {
   deleteAll();

   for(var i=0;i<arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""].length;i++)
   {
   newTR=syncTableObj.insertRow(syncTableObj.rows.length);
   // 0 checkbox
   checkBox=newTR.insertCell(0);
   // 1 auth table
   authTable=newTR.insertCell(1);
   // 2 self picurl
   selfPicUrl=newTR.insertCell(2);
   // 3 self item
   selfItem=newTR.insertCell(3);

   isSelfItemEnabled=setterSelfItem(i);
   isAuthItemEnabled=setterAuthItem(i);
   
   if(isAuthItemEnabled&&isSelfItemEnabled)
    setterEnableStatus(true,i);
   else
    setterEnableStatus(false,i);
   }
  }

  function setterAuthItem(i)
  {
   var isEnabled=false;

   if (!stringToBoolean(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["HasSameItem"])) 
 {
  authTable.innerHTML='<table class="inner-table-class inner-table-from-class"><tr><td class="inner-table-td-radio-class"></td><td class="inner-table-td-class main-img-class"></td><td class="inner-table-td-class" style="padding-top:21px;padding-bottom:21px;">此宝贝没有对应的授权宝贝</td><td class="inner-table-td-class sync-img-class"><span class="icon-no-class"/></td></tr></table>';
  return isEnabled;
 }

 var arr = arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["ListItemFrom"];
 var strHead = '<table class="inner-table-class inner-table-from-class">';
 var strTr = "";
 var isBinded = false;


 // 如果已经绑定了,标记一下,是否已经授权过也标记
    var numIid = getNumIidFrom(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["NumIidTo"]);
    if(numIid!="none")
    {
      for(var j=0;j<arr.length;j++)
      {
        if(arr[j]["NumIid"]==numIid)
        {
          isBinded=true;
          break;
        }
      }
    }
 

 for(var p=0;p<arr.length;p++)
 {
  var isSharedFrom = stringToBoolean(arr[p]["IsFromItemHasShareFrom"]);
  var isSharedTo = stringToBoolean(arr[p]["IsFromItemHasShareTo"]);
  var picUrl='<a href="http://item.taobao.com/item.htm?id=' + arr[p][" rel="external nofollow" NumIid"] + '" target="_blank"><img class="icon" style="padding:0px;width:60px" src="' + arr[p]["PicUrl"] + '_sum.jpg" title="' + arr[p]["Title"] + '" /></a>';
  if(getEnabledStatus(isBinded,!isSharedTo,isSelfItemEnabled))
  isEnabled = true;
  strTr+='<tr><td class="inner-table-td-radio-class">'+getRadioCode(isBinded,!isSharedTo,isSelfItemEnabled,i,arr.length)+'</td><td class="inner-table-td-class main-img-class">'+picUrl+'</td><td class="inner-table-td-class">'+getAuthItemCode(arr[p],isSharedFrom,isSharedTo,i)+'</td><td class="inner-table-td-class sync-img-class">'+getEnabledCode(isBinded,!isSharedTo,isSelfItemEnabled,arr[p],numIid)+'</td></tr>';
 }
 authTable.innerHTML = strHead+strTr+'</table>';
 return isEnabled;
  }
  // 返回auth宝贝详情html代码
  function getAuthItemCode(obj,isSharedFrom,isSharedTo,i)
  {
   var labelStr = "";
   if(isSharedFrom) labelStr = '<span style="color:red;">【源】</span>';
   if(isSharedTo) labelStr = '<span style="color:red;">【受】</span>';
   return '<span style="line-height:20px;" columnName="NumIid">'+labelStr+'ID:' + obj["NumIid"] + '</span>'
       + '<span style="padding-left:14px;" columnName="OuterId">商家编码:' + obj["OuterId"] + '</span>'
       + '<span style="padding-left:14px;color:'+getPriceColor(obj["Price"],i)+'" columnName="Price">价格:' + obj["Price"] + '</span>'
       + '<br><span style="line-height:20px;" columnName="Title">' + obj["Title"] + '</span>';
  }
  // 返回self宝贝详情html代码
  function getSelfItemCode(obj)
  {
   var labelStr = "";
   if(stringToBoolean(obj["IsToItemHasShareFrom"])) labelStr = '<span style="color:red;">【源】</span>';
   if(stringToBoolean(obj["IsToItemHasShareTo"])) labelStr = '<span style="color:red;">【受】</span>';
   return '<span class="sync-table-td-class"><span style="line-height:20px;" columnName="NumIid">'+labelStr+'ID:' + obj["NumIidTo"] + '</span>'
       + '<span style="padding-left:14px;" columnName="OuterId">商家编码:' + obj["OuterIdTo"] + '</span>'
       + '<span style="padding-left:14px;color:black;" columnName="Price">价格:' + obj["PriceTo"] + '</span></span>'
       + '<br><span class="sync-table-td-class" style="line-height:20px;" columnName="Title">' + obj["TitleTo"] + '</span>';
  }
  // 返回绑定关系图标的html代码
  function getEnabledCode(isBinded,isAuthEnabled,isSelfEnabled,obj,numIid)
  {
   if(isBinded)
   {
      // 如果是绑定状态,还要看当前item是否为绑定的item
      // 在这种情况下,判断是否可绑定,不需要用到selfItem
      if(obj["NumIid"]==numIid)
        return '<span class="icon-bind-class"/>';
      else
      {
        if(stringToBoolean(obj["IsFromItemHasShareTo"]))
          return '<span class="icon-no-class"/>';
        else
          return '<span class="icon-ok-class"/>';
      }
   }else
   {
   if(isAuthEnabled&&isSelfEnabled)
    return '<span class="icon-ok-class"/>';
   else
    return '<span class="icon-no-class"/>';
   }
  }
  // 是否可以绑定
  function getEnabledStatus(isBinded,isAuthEnabled,isSelfEnabled)
  {
   if(isBinded) return false;
   if(isAuthEnabled&&isSelfEnabled)
    {
   return true;
    }
   else
    {
   return false;
    }
  }
  // 返回radio的html代码
  /**
  *  isBinded 是否已经绑定
  *  isAuthEnabled auth是否可同步
  *  isSelfEnabled self是否可同步
  *  当前rows的index
  *  当前auth-list的长度(如果是一对一,当然不需要radio)
  */
  function getRadioCode(isBinded,isAuthEnabled,isSelfEnabled,i,length)
  {
   if(isBinded) return "";
    if(length==1) return "";
   if(isAuthEnabled==false||isSelfEnabled==false) return "";
 return '<input type="radio" name="radio'+i+'">';
  }


  function setterSelfItem(i)
  {
   var isEnabled=true;
   var picUrl='<a href="http://item.taobao.com/item.htm?id=' + arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+" rel="external nofollow" "][i]["NumIidTo"] + '" target="_blank"><img class="



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 利用js的闭包原理做对象封装及调用方法

相关文章

  • 2017-05-11js获取当前周、上一周、下一周日期
  • 2017-05-11Reactjs实现通用分页组件的实例代码
  • 2017-05-11bootstrap table 多选框分页保留示例代码
  • 2017-05-11Omi v1.0.2发布正式支持传递javascript表达式
  • 2017-09-05js校验经纬度的格式是否符合规范
  • 2017-05-11JS实现复制功能
  • 2017-05-11jQuery实现动态生成表格并为行绑定单击变色动作的方法
  • 2017-05-11JavaScript验证知识整理
  • 2017-05-11原生javascript移动端滑动banner效果
  • 2017-05-11js 转义字符及URI编码详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vue-router:嵌套路由的使用方法
    • javascript正则表达式模糊匹配IP地址功能示例
    • 浅谈键盘上回车按钮的js触发事件
    • 详解Vuejs2.0之异步跨域请求
    • vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
    • ES6新特性三: Generator(生成器)函数详解
    • xmlplus组件设计系列之图标(ICON)(1)
    • jQuery设计思想
    • JS实现的模仿QQ头像资料卡显示与隐藏效果
    • 微信小程序 常用工具类详解及实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有