zoukankan      html  css  js  c++  java
  • javascript优化--03高质量编码

    使用Object的直接量实例构造轻量级的字典:

    • 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环;(考虑到兼容性,如Array.prototype是允许增加属性的);
    • 如果确实需要在Object.prototype中增加属性那么使用Object.defineProperty
      Object.defineProperty(Object.prototype, 'allkeys', {
          value : function () {
              var reuslt = [];
              for(var key in this) {
                 result.push(key);    
              }
              reutrn result;
          },
           writable: true;
           enumberable: false;
           configurable: true;
      })

    防止原型污染:

    • 使用null,Object.create:  var a = Object.create(null);

    使用hasOwnProperty方法避免原型污染:

    • 考虑到要检测的对象的hasOwnProperty可能被污染:
      var hasOwn = {}.hasOwnProperty;
      hasOwn.call(obj,'proto');
      ------------------------------------------
      function Dict(elems) {
         this.elems = elems || {};
      }
      Dict.prototype.has = function(key) {
        return {}.hasOwnPrototype.call(this.elems, key);
      }
      Dict.prototype.set = function(key, val) {
        this.elems[key] = val;
      }
      Dict.prototype.remove = function (key) {
        delete this.elems[key];
      }

    使用数组而不是字典类存储有序集合:

    • 使用for/in循环来枚举对象属性应当与顺序无关;
    • 如果聚集运算字典中的数据,确保聚集操作与顺序无关;

    避免在枚举期间修改对象:

    • 如果被枚举的对象在枚举期间添加了新的属性,则不能保证for/in循环的行为是可预见的;
    • 当迭代对象时,使用while或者for替代while;

    使用迭代方法:

    • 可以使用迭代方法代替for循环增加可读性;
    • 在需要提前终止循环的情况下,仍然使用传统循环;
    • 早类数组对象上复用通用的数组方法;[].forEach.call();
  • 相关阅读:
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
    INSPIRED启示录 读书笔记
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4148330.html
Copyright © 2011-2022 走看看