Hegwin.Me

溯洄从之,道阻且长。溯游从之,宛在水中央。

学习ES2015 Part 4

Object 新特性

Shorthand语法

ES2015有这么一个语法糖,新生成一个Object时,当键名与变量名相同时,可以有一个简略的写法。具体怎么写,看下面的例子。

过去,我们需要这样写:

function buildUser(first, last) {
  var fullName = first + ' ' + last;
  return { first: first, last: last, fullName: fullName };
}

上面这个function中return的部分显得非常累赘,我们现在可以这样写:

function buildUser(first, last) {
  let fullName = `${first} ${last}`;
  return { first, last, fullName };
}

这个例子中,我们也结合了前面几部分说到的内容:

  1. 使用let代替var进行变量声明

  2. 使用Template String代替了字符串拼接

  3. 使用了 Object 的 Shorthand 写法

当Object的属性是一个方法时,我们也可以使用类似的语法,比如我们这样写的function (Shorthand语法和非Shorthand语法是可以混用的):

function buildUser(first, last) {
  let fullName = `${first} ${last}`;
  const ACTIVE_POST_COUNT = 10;

  return { 
    first,
    last,
    fullName,
    isActive: function() {
      return postCount >= ACITVE_POST_COUNT;
    }
  };
}

我们可以省略 function 关键字,直接用方法名:

function buildUser(first, last) {
  let fullName = `${first} ${last}`;
  const ACTIVE_POST_COUNT = 10;

  return { 
    first,
    last,
    fullName,
    isActive() {
      return postCount >= ACITVE_POST_COUNT;
    }
  };
}

Object Destructing

这个特性和Array的Destructing非常类似,当我们只需要一个Object的部分属性时,不再需要一行次次去取。在ES5中:

let user = buildUser('Hegwin', 'Wang');

let first = user.first;
let last = user.last;
let fullName = user.fullName;

在ES2015中,则可以这样:

let user = buildUser('Hegwin', 'Wang');

let { first, last, fullName } = user;

只要需要赋值的变量名与Object的属性名相同,我们就可以这么操作。同时,我们也可以只取部分的属性:

let user = buildUser('Hegwin', 'Wang');

let { last, fullName } = user;

使用 Object.assign

如果我们需要合并多个Object,例如在function中,我们需要用参数中的值覆盖默认的配置,在这种场景下,我们可能会使用 jQuery.extend( target [, object1 ] [, objectN ] )这样的第三方提供的方法,而现在 Object.assign 就实现了这样的功能。举个例子就是这样:

function countdownTimer(target, timeLeft,options={}) {
  let defaults = {
    // default options here ...
  };

  let settings = Object.assign({}, defaults, options);

  // rest codes ...
}

注: 上面这个 Object.assign 的第一个参数,我们传了一个空的 Object,这是为了防止 defaults被覆盖而无法继续使用。

Tags:

Posted on: 2016-08-18

Back