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 06 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
bootstrap网格系统使用方法解析
Jan 13 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
Thinkjs3新手入门之如何使用静态资源目录
Dec 06 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
js计数器代码
2006/11/04 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python获取某一天是星期几的方法示例
2017/01/17 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
Python如何解除一个装饰器
2020/08/07 Python
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
售后主管岗位职责
2013/12/08 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
标准自荐信范文
2014/01/29 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
财务人员个人工作总结
2015/02/27 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技