• JavaScript可枚举的属性


     1     
     2 /*
     3     把P中的可枚举属性复制到o中,并返回o中
     4     如果o和p中含有同名的属性,则覆盖O中的属性
     5     这个函数并不处理getter和setter以及复制属性
     6     */
     7     function extend(o,p){
     8         for (prop in p){       //遍历p中的属性
     9             o[prop] = p[prop]; //将属性添加至o中
    10         }
    11         return o;
    12     }
    13 
    14     /*
    15      *将p中的可枚举属性复制o中,并返回o
    16      如果o和p中有同名的属性,o中的属性将不受影响
    17      这个函数并不处理getter和setter以及复制属性
    18     */
    19     function merge(o,p){
    20         for(prop in p){                          //遍历p中的所有属性
    21             if (o.hasOwnProperty[prop]) continue;//过滤掉已经在o中存在的属性
    22             o[prop] =p[prop];                    //将属性添加至o中
    23         }
    24         return o;
    25     }
    26     /*
    27     *如果o中的属性在P没有同名属性,则从o中删除这个属性
    28     *返回o
    29     */
    30     function restrict(o,p){
    31         for (prop in o){                      //遍历o中的所有属性
    32             if(!(prop in p)) delete o[prop];  //如果在p中不存在,则删除之
    33         }
    34         return o;
    35     }
    36 
    37     /*
    38      *如果o中的属性在p中存在同名属性,则从o中删除这个属性
    39      *返回o
    40      */
    41      function subtract(o,p){
    42          for(prop in o){                    //遍历p中的所有属性
    43               delete o[prop];               //从o中删除(删除一个不存在的属性不会报错)
    44          }
    45          return o;
    46      }
    47      /*
    48     *返回一个新对象,这个对象同时拥有o的属性和p的属性
    49     *如果o和p中有重名对象,使用p中的属性值
    50      */
    51      function union(o,p){
    52          return (extend(extend({},o),p);)
    53      }
    54      /*
    55     返回一个新对象,这个对象拥有同时在o和p中出现的属性
    56     很像求o和p的交集,但p中属性的值被忽略。
    57      */
    58      function intersection(o,p){  return restrict(extend({},o),p);
    59          
    60      }
    61      /*
    62      返回一个数组,这个数组包含的是o中可枚举的自有属性的名字
    63      */
    64      function keys(o){                                  
    65          if (typeof 0 !== "object") throw TypeError(); //参数必须是对象
    66          var result = [];                              //将要返回的数组
    67          for (var prop in o){                          //遍历所有可枚举的属性
    68              if(o.hasOwnProperty(prop)){               //判断是否是自有属性
    69                  result.push(prop);                    //将属性名添加至数组中
    70              }
    71 
    72          }
    73          return result;                                //返回这个数组          
    74      }
    75 
    76      /*ES5除了for/in 循环之外,定义了用以枚举属性名称的函数。
    77      第一个是Object.keys(),返回一个数组。
    78      第二个可枚举函数是Object.getOwnPropertyNames()
    79      ES3中无法实现类似的函数,因为ES3中没有提供任何方法来获取对象的不可枚举属性
    80      */
  • 相关阅读:
    BZOJ4569 : [Scoi2016]萌萌哒
    2016浙江省赛过山车记
    BZOJ4546(原) : 三元组
    BZOJ4539 : [Hnoi2016]树
    BZOJ4537 : [Hnoi2016]最小公倍数
    BZOJ4538 : [Hnoi2016]网络
    BZOJ4527 : K-D-Sequence
    BZOJ4504 : K个串
    BZOJ4471 : 随机数生成器Ⅱ
    BZOJ3659 : Which Dreamed It
  • 原文地址:https://www.cnblogs.com/yun1108/p/8737593.html
Copyright © 2020-2023  润新知