博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【重要】统一管理碎片代码,跟混乱代码说再见
阅读量:6965 次
发布时间:2019-06-27

本文共 13001 字,大约阅读时间需要 43 分钟。

我们在日常运输代码的时候,时常因为代码过于混乱而导致时间长了代码多了之后难以搬运,即便是老司机都得打起十二分精神,比如类似于下面这样的代码(大家一眼划过就行了):

$(document).ready(function(){            if (!getCookie("showNotice")) {                setCookie("showNotice", "1",1);                document.querySelector(".shadowBg").style.display = "flex";                document.querySelector(".new_year_notice span").addEventListener('click', function () {                    document.querySelector(".shadowBg").style.display = "none";                });            }             var newBanner = mcBanner();            newBanner.switchBanner('mcBannerBox', '.mcBannerChild', '.bannerDotBox', 5000);                        sliderBox({                id: document.getElementById('dynamic-list'),                direction: 'top',                intervalTime: 5000            });            sliderBox({                id: document.getElementById('honor-box'),                direction: 'left',                intervalTime: 6000,                clickLeft: document.getElementById('honor-box-left'),                clickRight: document.getElementById('honor-box-right')            });            let _countTo = document.querySelectorAll('.countTo'),                _countTo_len = _countTo.length;            for (let i=0; i < _countTo_len; i++) {                countTo({                    id: _countTo[i],                });            }            slideWord(document.getElementById('slideHonor'));            $.ajax({                url:'/payusercount',                type:'GET',                dataType:'json',                success:function(data){                    var _box = document.getElementById("box");                    for (var i = 0; i < data.length; i++) {                        _box.innerHTML += "
  • "+ data[i].mobile +"已购买"+ data[i].month +"个月
  • " } sliderBox({ id: document.getElementById('box'), direction: 'top', intervalTime: 3000 }); } }) $.ajax({ url:'/platform', type:'GET', dataType:'json', success:function(data){ document.getElementById("statistics1").dataset.count = data[0].number; document.getElementById("statistics2").dataset.count = data[1].number; document.getElementById("statistics3").dataset.count = data[2].number; document.getElementById("statistics4").dataset.count = data[3].number; let _countTo = document.querySelectorAll('.countTo'), _countTo_len = _countTo.length; for (let i=0; i < _countTo_len; i++) { countTo({ id: _countTo[i], }); } } }) }) $.ajax({ url:'/news/category', type:'GET', dataType:'json', success:function(data){ var artStr = ''; var categoryCount = 0; for (var item in data.categories) { if(categoryCount > 2) break; categoryCount++; var articleCount=0; var temStr = '' var strHead = ''; var strBottom = ''; var str = ''; strHead += '
  • '; strBottom += '

    查看更多>>

  • ' newitem = data.categories[item].id; for (var articleItem in data.articleLists[newitem]) { articleCount++; if(articleCount == 5) break; str += "

    "; str += data.articleLists[newitem][articleItem].name str += "

    "; }; temStr = strHead + str + strBottom; artStr += temStr }; $('.e-artical').append(artStr); } })复制代码

    这段代码好像还挺长的,其实仅仅是冰山一角。一个项目中如果都是这样的代码,基本可以说是废了,因为项目在日常不断的迭代当中,我们就只能不断地堆积代码,不断地让整个项目更加的混乱和臃肿。

    另外不得不说的是,现在很多小伙伴都会用框架来开发项目,但是,请记住,只要你对自己有有足够的信心足够的随意,你依然可以写出很混乱的代码,相信我,真的!

    下面献上整理过后的代码,相关的解释直接穿插到代码相应位置的注释中,方便理解

    $(document).ready(function(){            var thisPageThings = (function () {                 /*这外面可以写可以在下面的对象的方法中                  多次利用的函数,在这里也可以认为是私有函数                */                return {                     /*每次增加相关代码,请在对象里面新建方法,                  把新增的代码写在新建的代码里面,统一管理所有碎片代码,                  把混乱的代码切割为一块块的碎片*/                    addBan: function () {                        $('.addBan').click(function () {                            var id = $(this).data('id');                            $.ajax({                                url:'/addclick',                                type:'GET',                                data:{
    'id':id}, success:function(res){ console.log(res); } }) }); }, onceModal: function () { var res = document.cookie.indexOf("first_visit"); if(res == -1){ var exp =new Date(); console.log(exp.getTime()); exp.setTime(exp.getTime() + (21 - exp.getHours()) * 60 * 60 * 1000); //提前一小时吧 document.cookie ="first_visit=1;expires=" + exp.toGMTString(); //5秒测试 document.querySelector(".shadowBg").style.display = "flex"; document.querySelector(".new_year_notice span").addEventListener('click', function () { document.querySelector(".shadowBg").style.display = "none"; }); } }, mcBannerBox: function () { $('.mcBannerChild').length > 1 && (function () { var newBanner = mcBanner(); newBanner.switchBanner('mcBannerBox', '.mcBannerChild', '.bannerDotBox', 5000); }()); }, dynamicList: function () { $('#dynamic-list').children().length && sliderBox({ id: document.getElementById('dynamic-list'), direction: 'top', intervalTime: 5000 }); }, honorBox: function () { $('#honor-box').children().length && sliderBox({ id: document.getElementById('honor-box'), direction: 'left', intervalTime: 6000, clickLeft: document.getElementById('honor-box-left'), clickRight: document.getElementById('honor-box-right') }); }, slideHonor: function () { slideWord(document.getElementById('slideHonor')); }, payusercountAjax: function () { var _this = this; $.ajax({ url:'/payusercount', type:'GET', dataType:'json', success:function(data){ _this.event.publish('payusercountAjax', data); } }); }, platformAjax: function () { var _this = this; $.ajax({ url:'/platform', type:'GET', dataType:'json', success:function(data){ _this.event.publish('platformAjax', data); } }) }, categoryAjax: function () { var _this = this; $.ajax({ url:'/news/category', type:'GET', dataType:'json', success:function(data){ _this.event.publish('categoryAjax', data); } }) }, //此处放置所有的订阅 allSubscription: function () { this.event.subscribe('payusercountAjax', function (data) { var _box = document.getElementById("box"); for (var i = 0; i < data.length; i++) { _box.innerHTML += "
  • "+ data[i].mobile +"已购买"+ data[i].month +"个月
  • " } sliderBox({ id: document.getElementById('box'), direction: 'top', intervalTime: 3000 }); }); this.event.subscribe('platformAjax', function (data) { var _countTo = document.querySelectorAll('.countTo'), _countTo_len = _countTo.length; for (var i=0; i < _countTo_len; i++) { document.getElementById("statistics" + i).dataset.count = data[i].number; countTo({ id: _countTo[i] }); } }); this.event.subscribe('categoryAjax', function (data) { var artStr = ''; var categoryCount = 0; for (var item in data.categories) { if(categoryCount > 2) break; categoryCount++; var articleCount=0; var temStr = ''; var strHead = ''; var strBottom = ''; var str = ''; strHead += '
  • '; strBottom += '

    查看更多>>

  • '; newitem = data.categories[item].id; for (var articleItem in data.articleLists[newitem]) { articleCount++; if(articleCount == 5) break; str += "

    "; str += data.articleLists[newitem][articleItem].name; str += "

    "; } temStr = strHead + str + strBottom; artStr += temStr } $('.e-artical').append(artStr); }); } }; }()); //此处为上面自执行代码的相关配置,如果需要组织代码比如说一些设计模式 (function () { //发布和订阅的方法模板,这里其实就是一个发布订阅模式 var event = { clientList: [], subscribe: function (key, fn) { if (!this.clientList[key]) { this.clientList[key] =[]; } this.clientList[key].push(fn); }, publish: function () { var key = Array.prototype.shift.call( arguments ), fns = this.clientList[ key ]; if ( !fns || fns.length === 0 ) { return false; } for ( var i = 0, fn; fn = fns[ i++ ]; ) { fn.apply( this, arguments); } } }; //将发布订阅的方法集成到要使用的对象中 var installEvent = function (obj) { obj[ 'event' ] = event; }; installEvent( thisPageThings ); //统一执行所有的代码碎片 for (var thing in thisPageThings) { typeof thisPageThings[thing] === 'function' && thisPageThings[thing](); } }()); });复制代码

    从一开始就让代码结构化是很有好处的,一方面提高可读性,另一方面为以后的扩展提供了想象空间,比如自执行的相关配置可以整理出一个公用文件,方便随处可用;就算只有单个地方会用到,这么个结构就很方便我们做到DRY——don't repeat yourself!

    转载地址:http://jxwsl.baihongyu.com/

    你可能感兴趣的文章
    mysql 删除重复数据
    查看>>
    PHP等比例缩放图片
    查看>>
    Linux下Eclipse+CDT的搭建
    查看>>
    python的tab键补全
    查看>>
    DevOps系列——公司Docker测试,打版,发布实战
    查看>>
    SQLITE3 使用总结
    查看>>
    python3学习之md5加密
    查看>>
    spring中MessageSource的配置使用方法3--ResourceBundleMessa
    查看>>
    Python在同一位置刷新显示进度信息
    查看>>
    解决获取微信用户信息 48001错误
    查看>>
    js操作单选框
    查看>>
    说说内存可见性
    查看>>
    oracle的内存spa与pga
    查看>>
    百度发力智能终端 百加异军突起
    查看>>
    《TableStore最佳实践:轻松实现轨迹管理与地理围栏》
    查看>>
    网络基本功(四):细说路由(上)
    查看>>
    我的友情链接
    查看>>
    解决大数据难题 阿里云MaxCompute获科技大奖
    查看>>
    修复Mysql数据库
    查看>>
    Java基础学习第八天
    查看>>