ES6对象的扩展

对象的扩展

对象类别

  • 普通对象: 拥有JS对象所有默认的内部行为;
  • 奇异对象: 其内部行为在某些方面别于默认行为;
  • 标准对象: 在ES6中被定义的对象, 如 Date, 标准对象既可以是 普通对象, 也可以是 奇异对象;
  • 内置对象: 脚本开始运行时由JS运行环境提供的对象, 所有的标准对象都是内置对象;

对象属性初始化器速记法

对于对象属性名称与其对应的属性值和本地变量重复的情况下可以使用 属性初始化器速记法 简写, 如:

const jsBook = function(author, year) {
	return { author, year };	// 属性初始化器速记法
};

方法简写(concise method)

可以省略关键字 function, 不多说, 直接看例子:

const jsBook = {
	<!-- 方法简写 -->
	read() {
		// write hello world
	}
};

使用这种方式定义的对象方法名字就是属性名, 而ES5的写法是可以在 function 关键字后指定一个名称做为该方法的名称, 还有一点区别是简写的方法可以使用 super, 非简写的不能。

需计算属性名

允许属性名包含在变量中, 如:

const hash = Math.random().toString(36).slice(2);
const jsBook = {
	[hash]: hash	// 在使用计算属性名时无法使用属性初始化器速记法表示对象
}

Object.assign

该方法为混入对象属性和方法提供了便利,第一个入参为接收者,其余入参皆为提供者,该方法将会对提供者进行一次浅复制到接收者,入参有序,遇见同名属性后者覆盖前者,遇到访问器属性则会转成数据属性拷贝到接收者上。

let obj = {};
let other = {
	get someAttr() {
		return 'hello world';
	}
};

obj = Object.assign(obj, other);

let desc = Object.getOwnPropertyDescriptor(obj, 'someAttr');
console.log('get' in desc);		// false

重复的对象字面量属性

ES5的严格模式下会禁止对象使用重复属性名,遇见重复属性将会抛出错误。ES6废除了该检查,重复属性名后者覆盖前者。

posted @ 2018-02-02 18:03  xvivx  阅读(121)  评论(0编辑  收藏  举报