Es6对象的扩展

属性的简洁表达式

 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"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 属性的简介表示法 varfoo ='bar'; varbaz = {foo}; baz//{foo: "ba...
    ningluo阅读 295评论 0 0
  • 属性的简写方法 上面代码中,变量在对象中当做属性名,属性值就是变量的值,这就是属性的简写方式。 函数中的声明的对象...
    秦声阅读 593评论 0 7
  • 1.属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 2.属性名表达式...
    walker_10086阅读 266评论 0 0
  • 属性的简洁表示法 var birth = '2000/01/01'; ps: CommonJS API定义很多普通...
    娟子阅读 312评论 0 0
  • 对象的传统表示法 我们回顾一下,对象的传统表示法: 上面的案例很简单,变量person就是一个对象,对象含有nam...
    幸宇阅读 336评论 0 1