javaScript封装的各种写法


Posted in Javascript onAugust 14, 2017

在javascript的世界里,写法是个神奇的现象,真是百家齐开放啊!每次看到老外写的js组件,思想和写法都怪异,就没看到一个js结构基本相同的代码出来。今天,我就来谈谈js写法,我在开发过程中,也写了几种。对于性能方面,如果代码结构或逻辑写的不好,会造成计算机CPU的运算加大,运行性能降低,js的写法对性能的影响也是至关重要的。

      通常写js组件开发的,都会用到匿名函数的写法去封装一个对象,与外界形成一个闭包的作用域。(这里对于js的继承,多态,我就不多说了,高级程序员应该具备这些知识,如果您也做过java开发,这个概念太熟悉了。)

     主要对封装进行研究,因为前后台都会涉及到面向对象的概念,对于封装,怎么封装,封装的性能,等等很重要概念。封装(在程序世界是第一概念,我个人认为),全天下漫天遍野的封装,JQuery,EXT和Prototype.js封装的是javascript,jQuery uI和jQuery mobile封装着jQuery,java中的JDBC在spirng,Hibernate等框架封装着,在这里列举几个例子,还有很多种不一一介绍。

     回到主题javaScript封装写法,先来看看一个简单的

function hello(){
 var a = 'hello';
 alert(a);
}

  js函数是最原始,最基础的封装,懂js一目了然,如果你的页面不需要很多js交互操作,就可以用这种简单的方式,如果你喜欢用JQuery,则需要写成这样

$(function(){
 $('#id').click(function(){
 alert('hello');
 })
});

 如果用Node.js则比较复杂点,因为要Node.js要加载一个HTTP模块,写法如下     

var http = require('http');
http.createServer(function(req,res){
 res.writeHead(200,{'Content-Type':'text/html'});
 res.write('<p>hello</p>');
}).listen(8080);

再深层次封装写法,如果遇到大量使用js操作,单凭每个小的函数无法满足,因为它们存在一个公共的域中,写法多而散很容易造成了很多bug因素,需要规整。js创造者给我们提供了一个叫匿名函数,顾名思义,匿名函数就是没有实际名字的函数,它的格式很多种,!function(){}(),(function(){})(),(function(){}()),new function(){},void function(){}();JQuery.js就是一个匿名函数封装,先看最常用的

(function(){
 star.init = (function(name){
 var e = new Editor(name, Data.toolbarData);
 });
 })();

 如果开发一些js组件的时候,可以先创建一个对象,给这个对象属性和方法,让这个对象能够单独操作和可以和其他对象合作

var klm = klm || {};
 klm = (function(){
 //第一个写法
 klm.init = function(){
  alert('hello');
 }
//第二个写法
  klm.browser = (function(ua){
  var b = {
  msie:/msie/.test(ua) && !/opera/.test(ua),
  opera:/opera/.test(ua),
  safari:/webkit/.test(ua) && !/chrome/.test(ua),
  firefox:/firefox/.test(ua),
  chrome:/chrome/.test(ua)
  };
  })(window.navigator.userAgent.toLowerCase());
  //将其定义方法以接口方式返回给外界引用
  return{
  init: klm.init,
  browser:klm.browser 
  }
 })();

             接下来这种js封装写法是我自己比较喜欢的   

var myOpinion = myOpinion || {};
 myOpinion.prototype={
 init:function(obj,i){
  alert('hello');
  },
  closeWindow:function(obj,d){
  obj.click(function(){
  d.hide();
  });
  }
 }
 $(function(){
  var my = myOpinion.prototype;
  my.init($(".z-sidebar li em"),$("#contact")); 
  $("#contact").add(my.closeWindow($(".z-sidebar li em"),$("#contact")));
 });

   这种方式先通过prototype继承方式把每一个小的操作封装成属性,init和closeWindow,然后可以进行初始化加载如my.init();也可以绑定到某个操作事件上如$("#contact").add(my.closeWindow());这些封装一气而成。

还有定义单个属性封装

WinShow.create = function(c,body){ 
  var _head = '<div class="+ c.heacss +"><span class="+ c.concss +">' + c.title + '</span></div>';
  this.container.innerHTML = _head;
  return this.container;
  this.container.onclick = function(e){
  alert('hello');
  }
 }

在这里我创建一个create属性以匿名函数形式封装一段HTML代码,并给这个 HTML代码绑定点击事件。

列举以上几种js封装形式,但是小生还在研究中,这几种都能实现相同操作,可是写法有些区别,对于性能方面谁有更好的见解可以点评我,进行交流。

Javascript 相关文章推荐
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
JavaScript DOM元素尺寸和位置
Apr 13 Javascript
Node.js编写组件的三种实现方式
Feb 25 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
基于Vue实现拖拽效果
Apr 27 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 #Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 #Javascript
jQuery实现手势解锁密码特效
Aug 14 #jQuery
Vue+Element使用富文本编辑器的示例代码
Aug 14 #Javascript
带你快速理解javascript中的事件模型
Aug 14 #Javascript
JS获取子、父、兄节点方法小结
Aug 14 #Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
德生9700DX电路分析
2021/03/02 无线电
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
JavaScript脚本库编写的方法
2015/12/09 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
Python 移动光标位置的方法
2019/01/20 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
劳资专员岗位职责
2013/12/27 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
遗产继承公证书
2014/04/09 职场文书
《开国大典》教学反思
2014/04/19 职场文书
学校党员对照检查材料
2014/08/28 职场文书
地理科学专业自荐信
2014/09/01 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
化验员岗位职责
2015/02/14 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书