学习ES2015 Part 4
Learn New Features in ES 2015 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 };
}
这个例子中,我们也结合了前面几部分说到的内容:
使用
let
代替var
进行变量声明使用Template String代替了字符串拼接
使用了 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
被覆盖而无法继续使用。