属性的简洁表达式
ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁
实例以下
const baz = {foo};
baz // {foo: "bar"}
// 等同于
const baz = {foo: foo};
属性简写
方法也可以简写
method() {
return "Hello!";
}
};
// 等同于
const o = {
method: function() {
return "Hello!";
}
};
注意,简洁写法的属性名总是字符串,这会导致一些看上去比较奇怪的结果。
属性名表达式
java script 定义对象的属相,有两种方法
// 方法一
obj.foo = true;
// 方法二
obj['a' + 'bc'] = 123;
上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。
但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用方法一(标识符)定义属性。
var obj = {
foo: true,
abc: 123
};
在Es6中既可以obj['a'+'bc']=123的表达式去写
let obj = {
[propKey]: true,
['a' + 'bc']: 123
};
表达式可以用于定义方法名 需要注意的是简介表达式与属性名表达式不可以用同时使用 不然会报错。
const foo = 'bar';
const bar = 'abc';
const baz = { [foo] };
// 正确
const foo = 'bar';
const baz = { [foo]: 'abc'};
注意,属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object],这一点要特别小心
const keyA = {a: 1};
const keyB = {b: 2};
const myObject = {
[keyA]: 'valueA',
[keyB]: 'valueB'
};
myObject // Object {[object Object]: "valueB"}
上面代码中,[keyA]和[keyB]得到的都是[object Object],所以[keyB]会把[keyA]覆盖掉,而myObject最后只有一个[object Object]属性。
方法的 name 的属相
函数的name属性,返回函数名。对象方法也是函数,因此也有name属性。
const person = {
sayName() {
console.log('hello!');
},
};
person.sayName.name // "sayName"