ES6为对象带来的新特性。

对象传统的写法:

let person={

  'name':'Lily',

  'say':function(){

    alert('hello!');

  }

}

1、ES6中写法更简便

对象属性:

var name='Lily';

var age='13';

var person={name,age};

console.log(person)     //{name:'Lily',age:'13'}

对象方法:

var person={

  say(){      //省略了function

    alert('hello');

  }

}

2、属性名可以为表达式

当用字面量定义(用大括号{}定义)一个对象时,属性名或方法名可以是表达式。

var f='first';

var n='Name';

var s='say';

var h='Hello';

var person={

  [f+n]:'Zhang',

  [s+h](){

    return 'hello world';

  }

}

console.log(person.firstName)   //'Zhang'

console.log(person.sayHello())   //'hello world'

3、ES6为对象新增的函数

(1)Object.is()  :比较两个值是否严格相等。

首先我们来区分什么是严格相等和抽象相等:

  var str='12';var num=12;

  • 严格相等   (要求变量类型也相同)

   str===num   //false

  • 抽象相等 (将两边变量转化为同一类型再比较)

    str==num   //true

对于新增函数Object.is():Object.is(str,num)   //false

 

(2)Object.assign() :将源对象的属性值赋值到目标对象。

  let target={'a':1};

  let origin={'b':2,'c':3};

  Object.assign(terget,orgin);

  console.log(target)       //{a:1,b:2,c:3}

当源对象有与目标对象相同名字的属性时,会覆盖目标对象上的属性(后者覆盖前者);

Object.assign()可以接受多个源对象参数:

  let origin2={'d':4,'a':5};

  Object.assign(terget,orgin,orgin2);

  console.log(target)       //{a:5,b:2,c:3,d:4}

 

(3)Object.getPrototypeOf() :获取一个对象的prototype属性。

  function Person={

  }

    Person.prototype={

   say(){ console.log('hello'); }

  };

  let Lily=new Person();

  Lily.say();  //hello

获取Lily的prototype属性: Object.getPrototypeOf(Lily)   //say:function(){ ...}

可以实现继承:

 

(4)Object.setPrototypeOf()  : 设置对象的prototype属性

以(3)中的例子来说明:

  Object.setPrototypeOf(Lily,{

    say(){ console.log('hi') }

  })

  Lily.say()  //hi

 

 

 

 

 

_______________________________

参考:公众号 web前端教程