• javascript习惯性的细节问题 —— 重谈细节,别只顾优雅


      晚饭之前,浏览了下博客园,阅读了梦想天空(山边小溪)翻译的《JavaScript初学者应注意的七个细节》的原文,写的非常不错。平常不注意的点点习惯,可能积累到最后成为致命的问题。正所谓,小病不医成大患,一定要防微杜渐。

      一、简化代码

      这是每个程序员最起码的素养和习惯,随着经验的不断丰富,一定学会回顾总结,写出简洁高效的代码。要想成为杰出的IT人员,忌讳只为完成任务而工作,除非你只是为了混口饭吃!至于如何简化代码,可以坚持阅读行业顶级人士的代码风格和习惯,当然不只是为了简洁代码而做这些工作,懂其然懂其所以然!

      具体如何简化,山边小溪已经列举了部分例子,另外可以灵活地使用“||”-逻辑或和“&&”-逻辑与,这里肯定有人反对,使用逻辑运算符时,一定程度上增加代码阅读难度,因而我使用了灵活运用字眼。当你有一定经验基础,使用逻辑运算符会让代码量降低,结构也非常清晰简单。至于哪些地方使用,什么时候使用,如何使用,这些都是经验的积累和总结!死记硬背得来的结果终究非你所得,好比是打肿脸充胖子!罗嗦一句,不要怕犯错,犯错是技术的永久财富!

      二、使用原生函数

      使用javascript自带的函数,或者寄主的原生函数,或者DOM方法等,都会让你完成工作更加轻松,但这并非万能膏药,任何时候任何地方都能使用!例如:博主在addclass函数中推荐使用Array.push()方法。

      在这里声明,只是就这个函数论事,无意横加指责,若有得罪还请见谅!

      个人感觉,为元素添加class name使用数组的push()颇为勉强,而且比起上面拼接字符串的方法更不易于理解。看看在firefox的测试数据:

      在chrome浏览器中测试,数据差别更大,况且这还是元素中没有class name的情况下!这样的情况,类似于面向对象中的拆箱和装箱动作,是比较消耗资源的,当然不是说Array.push()方法不好,而是不适合在这里使用,仅此而已!

      其他方面,文章写得很好,例如:事件委托,对象封装等。 推荐初学者仔细阅读,举一反三,点点滴滴的细节会改变代码的风格和质量!

      另外,关于设计模式方面,我就不多谈,因为自己涉入不深,自己犯错值得提倡,但不能误导别人!不过,我经常用到的对象封装模式,可以给大家看看,记住不存在万能的设计模式,挑选适合的,高效简洁的才是终极目标!

      如下是最为常见的惰性加载单体模式:

    function Person(){
        var name, age, job, pay, uniqueInstance;   //私有属性
    function prgetJob(){ //私有方法 return job; } function init(){ //初始化接口对象  
        var obj = { //接口对象
              getAttr: function(){ //获取私有属性
                  return job + " " + pay;
              },
              getMethod: function(){ //获取私有方法
                  prgetJob();
              },
              setAttr: function(n, a, j, p){ //设置私有属性
                  name = n;
                  age = a;
                  job = j;
                  pay = p;
              }
          };

      return obj;
      } 
      
    return{
        getInstace: function(){
          if(!uniqueInstance)
            uniqueInstance = init();

          return uniqueInstance;
        }

      }; //返回接口方法

    }
      var person = new Person();

      person.getInstace().setAttr("moltboy", 27, "it", "8000");

      console.log(person.getInstace().getAttr());

      单体模式有一个共同特点:单体对象都是在脚本加载的时候就被创建出来。对于资源密集型的或者开销甚大的单体,更合理的做法是将其实例化推迟到需要使用它的时候。这种技术叫做惰性加载(lazy loading),经常用于加载大量数据的单体。其他情形下,最好还是使用立即实例化方式。

      这种惰性加载单体的特别之处在于,对它们的访问必须借助于一个静态方法,如:Singleton.getInstance().methodName(),getInstance方法会检查该单体是否已经被实例化。如果没有,那么它将创建并返回其实例。如果已经实例化过,那么它将返回现有实例。

  • 相关阅读:
    readonly
    cut
    finger
    ping fping
    chmod/chown/chgrp/chattr
    synchronized 和 volatile 比较
    volatile的适用场合
    volatile的适用场合
    细说Java多线程之内存可见性
    SDUT2139图结构练习——BFS——从起始点到目标点的最短步数
  • 原文地址:https://www.cnblogs.com/moltboy/p/3026827.html
Copyright © 2020-2023  润新知