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 相关文章推荐
HTML DOM的nodeType值介绍
Mar 31 Javascript
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
jQuery对Select的操作大集合(收藏)
Dec 28 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
利用Angular.js限制textarea输入的字数
Oct 20 Javascript
vue+iview+less+echarts实战项目总结
Feb 22 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
Apr 16 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 Javascript
node读写Excel操作实例分析
Nov 06 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
JS不要再到处使用绝对等于运算符了
Apr 30 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
javascript实现动态加载CSS
2015/01/26 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
老生常谈js数据类型
2017/08/03 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue.js实现备忘录demo
2019/06/26 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
python实现socket端口重定向示例
2014/02/10 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
退伍老兵事迹材料
2014/01/31 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
飞屋环游记观后感
2015/06/08 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
Python答题卡识别并给出分数的实现代码
2021/06/22 Python