zoukankan      html  css  js  c++  java
  • 前端感悟 ---入门级

    这几周,看了各种各样的代码,经过一堆代码review,也有了一些基本上的码农感觉。打算记录下来,这样以后忘记了还能回来看看。本来上个星期就想写这篇文章的,结果星期天晚上被叫回去修bug了。。

    下面分css和js来记录。

    css:

    在传统意义上,css的书写,只要能够将效果表现出来,同时前面的selector不要太长就好。这样在项目比较小的时候,修改起来就十分方便。但是,当整个项目开始极度膨胀以后,css就会变得极其庞大。1000+行的css轻轻松松就能写到。

    在review过程中,可以发现,大部分的css都是无法重用的。一个button样式,基本都只能是在当前页用用,而无法用于整个网站button的基类。所以,在这里,就有一个概念,就是页面中的元素style,是通过一堆class拼凑出来的,每个class都是有自己的样式,比如:

    博客园编辑文章下面的发布按钮,它的样式是这样的:

    input.Button {
        float: left;
        background: #6B86B3;
        border: 1px solid #333333;
        text-transform: uppercase;
        margin-right: 15px;
        color: #FFFFFF;
        font-size: 12px;
        font-weight: bold;
        width: 70px;
        text-align: center;
        cursor: pointer;
        height: 26px;
        line-height: 22px;
    }

    这就是我们平时书写css的习惯,一溜样式写下来,效果有了,就可以回家洗洗睡了。但是,这些样式,就基本只能用在下面三个按钮上,其余的button就无法使用这些style了。

    当然,我们可以把里面的css抽离出来,让它大部分代码可以在整个站点使用。如下:

    .leftFloat {
        float: left;
    }
    .button {
        border: 1px solid #333;
        text-transform: uppercase;
        font-weight: bold;
        margin-right: 15px;
        text-align: center;
        cursor: pointer;
    }
    .largetButton {
        width: 70px;
        height: 26px;
        line-height: 22px;
    }
    .smallFont{
        font-size: 12px;
    }
    .whiteFont{
        color: #fff;
    }
    .darkBlueBackground {
        background:  #6B86B3;
    }

     这样做以后,代码总行数好像变多了,但是它的可重用性大大提升。对于smallFont,whiteFont,leftFloat,darkBlueBackground等,这些类在使用中就可以不拘束在这个button中了,对于所有的字体,我都可以使用smallFont,whiteFont。这样,原来的input.Button就会由一些列类组装来显示按钮效果,如下:

    <input type="submit" class="leftFloat button largetButton smallFont whiteFont darkBlueBackground" name="Editor$Edit$lkbPost" value="发布" onclick="return CheckInput();" id="Editor_Edit_lkbPost">

    当然,对于规模较小,样式简单的网站,这样做是没有意义的。在那些已经有了自己的显示规范,样式复杂,规模较大的网站,这样做在后期的时候,只要在html里进行class组装,再定制一下当前页简短的css,就可以快速的完成一个页面的开发了。

    js

    js方面,是被骂了无数遍以后才醒悟的。以前总喜欢写看起来高大上的代码,而且据说效率还很高,比那些传统的代码还看又好用多了。但是,这样的代码,完全是写给机器看的。在多人团队中,代码不仅仅是要写给机器看,更重要的是写给人看。在这方面,甚至可以牺牲一小部分的性能,来做出易读的代码。(注意是一小部分!比如多写几句var之类的)

    这里要说一个关于传参数的东西。一般在js中,我们写函数时,参数的使用主要有两大派,如下:

    //一溜型
    function a(a1,a2,a3,a4,a5,a6,a7,a8){
        //......
    }
    
    //一堆型
    //options = {a1: '',a2: '',a3: '',a4: '',a5: '',a6: '',a7: '',a8: ''}
    function a(options){
    
    }

    参数一溜排开的方式,有一个优点,那就是很清楚的让别人知道,你需要的input是什么,要你的程序跑起来需要给你什么。这样在后来人接手的时候方便理解。不过一长串参数吊在函数后面,实在是有碍观赏。而且如果想多加一个参数,还要在后面再加一个名字。总感觉不是很优雅。

    参数堆在options里面的方式,让人感觉很赏心悦目。这样的写法感觉很简介大方。但是如果是在这样的情况下:

    function a(options){balabala;b(options);};

    function b(options){balabala;};

    这样的话,想要知道options里面要有什么,就必须找到b里面为止。这还是简单的情况,如果有个5,6层的调用呢,简直要让人抓狂。

    有人说可以用注释,在第一次写代码的时候,我们会去乖乖注释。但是,后来人修改你的代码的时候,哪有空改注释,这样反倒形成一个坑了。

    现在我的做法一般是这样:

    function a(options){
        //input start
        options = options || {};
        var a1 = options.a1;
        var a2 = options.a2;
        var a3 = options.a3;
        var a4 = options.a4;
        var a5 = options.a5;
        var a6 = options.a6;
        var a7 = options.a7;
        var a8 = options.a8;
        //input end
    
        //processing
    
        //output start
        return {
            a1: a1,a2: a2,a3: a3,a4: a4,a5: a5,a6: a6,a7: a7,a8: a8
        };
        //output end
    }

    在函数开始的时候,清楚的写明我要的是什么,在出去的时候,写明传出去的是哪些值。options只在input设置中用,后面的函数体中就不再调用了。这样,函数虽然长了,但是在团队开发中,更有利于别人理解你的代码。而在你的具体processing中,别人可以当做一个黑盒,只在input中添加语句,processing后面添加几句,就可以完成修改了。这样更加节省开发成本。

    小tips:

    我们经常担心传进来的objec或者function是undefined。这样很容易在后期报错。不过有一招,让你不用担心这个:

    function a(options){
        options = options || {};
        var testFunc = options.noFunc || function(){return {};};
    
        //...
    }

    这样,即使没有options,没有options.noFunc,在后面的调用中,调用options.balabala和执行testFunc都不会出错。当然,在testFunc中,后面的默认函数的返回值的类型,最好和原来的noFunc返回类型一致,这样可以更好的增强程序稳定性。

    好像不小心在博客园的博客上喷了博客园的css,希望不会被干掉。。。。

  • 相关阅读:
    5 float f = 3.4,是否正确
    4 String是基本数据类型吗
    3 访问修饰符public,private,protected以及不写(默认)时的区别
    1 请谈谈面向对象的三大特征?
    接口和抽象类有什么区别
    2 Java中 == 和 equals 和 hashCode 的区别
    java中重载(overload)与重写(override)的区别
    servlet中请求转发(forword)和重定向(redirect)的区别
    团队-项目名称五子棋-团队一阶段互评
    团队-项目名称五子棋-开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/cyITtech/p/3840767.html
Copyright © 2011-2022 走看看