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 ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
angular json对象push到数组中的方法
Feb 27 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 Javascript
react+antd 递归实现树状目录操作
Nov 02 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
php下intval()和(int)转换使用与区别
2008/07/18 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
JS删除数组指定值常用方法详解
2020/06/04 Javascript
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
基于Python的关键字监控及告警
2017/07/06 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Python Django 命名空间模式的实现
2019/08/09 Python
Numpy之reshape()使用详解
2019/12/26 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
股东出资证明书范例
2014/10/04 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
个人委托函范文
2015/01/29 职场文书
物流业务员岗位职责
2015/04/03 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js