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 photoFrame 图片边框美化显示插件
Jun 28 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
Apr 11 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
Angular4 中内置指令的基本用法
Jul 31 Javascript
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
JavaScript继承与聚合实例详解
Jan 22 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
简述pm2常用命令集合及配置文件说明
May 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php 字符串函数收集
2010/03/29 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php三元运算符知识汇总
2015/07/02 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python五子棋游戏的设计与实现
2019/06/18 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
Python学习笔记之装饰器
2020/08/06 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
大专生自我鉴定范文
2013/10/01 职场文书
行政专员岗位职责
2014/01/02 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
中职招生先进个人材料
2014/08/31 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书