javaScript中封装的各种写法示例(推荐)


Posted in Javascript onJuly 03, 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 maxlength文本字数限制插件
Apr 16 Javascript
jquery图片上下tab切换效果
Mar 18 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
jquery如何通过name名称获取当前name的value值
Dec 20 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
jQuery基于排序功能实现上移、下移的方法
Nov 26 Javascript
react.js CMS 删除功能的实现方法
Apr 17 Javascript
Vue实现百度下拉提示搜索功能
Jun 21 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
VUE基于NUXT的SSR 服务端渲染
Nov 30 Javascript
vue项目配置同一局域网可使用ip访问的操作
Oct 23 Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 #Javascript
React组件生命周期详解
Jul 03 #Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 #Javascript
Swiper实现轮播图效果
Jul 03 #Javascript
jQuery实现点击关注和取消功能
Jul 03 #jQuery
You might like
MySQL连接数超过限制的解决方法
2011/07/17 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php 魔术方法详解
2014/11/11 PHP
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
JS之相等操作符详解
2016/09/13 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
使用Python对MySQL数据操作
2017/04/06 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Python xlwt模块使用代码实例
2020/06/10 Python
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
公益活动策划方案
2014/01/09 职场文书
大课间活动制度
2014/01/18 职场文书
保安的辞职报告怎么写
2014/01/20 职场文书
重阳节登山活动方案
2014/02/03 职场文书
业务员简历自我评价
2014/03/06 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
人力资源求职信
2014/05/25 职场文书
诚信贷款承诺书
2014/05/30 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers