鲜荣彬
Herry

(一)简洁表示法

  ES6允许属性的简洁表示法,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量

    ES5写法

function getPoint() {
  var x = 1;
  var y = 10;
  return {x:x, y:y}
}

  ES6写法

function getPoint() {
  var x = 1;
  var y = 10;
  return {x, y};
}

(二)属性名表达式

 即允许使用一个变量,或 变量相加,或字符串相加,结果为 propkey。以 [proKey] 的形式,作为 对象A的属性。

   但是: 属性名表达式与简洁表示法 不能同时使用。

   如下例子: 即可是 属性,也可以定义方法名

let propKey = 'foo';

let obj = {
  [propKey]: true,
  ['a' + 'bc']: 123,
  ['say'+'Hello'](){
   } 
};

 (三)方法的name属性

  即返回函数名,对象的方法也是函数,因此,也有name属性。

  如下例子中,firstName是 取值函数,在方法名前加上 get

             如果是存值函数,方法名前会加上 set

let person= {
    sayName(){ },
    get firstName(){      
        console.log('Ma');
        return 'Mao'; 
    } 
}

   但是有两种特殊情况: bind 方法创造的函数,返回 “bound "+ 原函数名

             Function构造函数创造的函数, 返回 "anonymous"

(new Function()).name;  --anonymous

let doOk=function(){};
 
doOK.bind().name  --bound doOK

 

 如果对象的方法是一个 Symbol值,则 name 值是 Symbol(description) 中的 description 。

 

(四)Object.is() 

  ES6提出 Same-Value equaliity 同值相等算法,使用  Object.is()  新方法 避免 ”==“中对值的类型自动转换,

  以及 ”===“ 中 NaN !== NaN,+0===-0 。

 

 (五)Object.assign()  

    Object.assign = function(target,sources) 

 

    用于对象的合并,将源对象的所有可枚举属性,复制到目标对象。 

  1、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。 

let target = { a: 1, b: 1 },
    source1 = { b: 2, c: 2 },
    source2 = { c: 3 };

Object.assign(target, source1, source2);

 

   如果该参数不是对象,则会先转成对象,然后返回。

        typeof Object.assing(2);   // object

   2、Object.assign 方法实行的是浅拷贝,而不是深拷贝。

          如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

              

 

posted on 2017-08-20 16:35  Herry彬  阅读(183)  评论(0)    收藏  举报