ES6扩展的对象功能

1、对象初始化属性简写

在ES5及更早版本中,对象字面量是“键/值对”的简单集合。这意味着在属性值被初始化时可 能会有些重复,例如:

可以像这样用ES6重写:

2、方法简写

ES6同样改进了为对象字面量方法赋值的语法。在ES5及更早版本中,你必须指定一个名称 并用完整的函数定义来为对象添加方法,如下:

通过省略冒号与function关键字,ES6将这个语法变得更简洁,这意味着你可以这样重写 上个例子:

3、计算属性名

在ES6中,需计算属性名是对象字面量语法的一部分,它用的也是方括号表示法,与此前在 对象实例上的用法一致。例如:

对象字面量内的方括号表明该属性名需要计算,其结果是一个字符串。这意味着其中可以包 含表达式,像下面这样:

4、Object.is()

ES6引入了Object.is() 方法来弥补严格相等运算符残留的怪异点。此方法接受两个参数, 并会在二者的值相等时返回true        ,此时要求二者类型相同并且值也相等。这有个例子:

在许多情况下,Object.is() 的结果与=== 运算符是相同的,仅有的例外是:它会认为+0与-0不相等,而且NaN等于NaN 。不过仍然没必要停止使用严格相等运算符,选 择Object.is(),还是选择==或=== ,取决于代码的实际情况。

5、重复的对象字面量属性

在ES5严格模式下运行时,第二个name属性会造成语法错误。但ES6移除了重复属性的 检查,严格模式与非严格模式都不再检查重复的属性。当存在重复属性时,排在后面的属性 的值会成为该属性的实际值,如下所示:

在本例中,person.name的值为 "Greg",因为这是赋给该属性的最后一个值。

6、修改对象的原型

一般来说,对象的原型会在通过构造器或Object.create() 方法创建该对象时被指定。直到 ES5为止,JS编程最重要的假定之一就是对象的原型在初始化完成后会保持不变。尽管 ES5添加了Object.getPrototypeOf()方法来从任意指定对象中获取其原型,但仍然缺少在初始化之后更改对象原型的标准方法。ES6通过添加Object.setPrototypeOf()方法而改变了这种假定,此方法允许你修改任意指定对象的原型。它接受两个参数:需要被修改原型的对象,以及将会成为前者原型的对象。 例如:

7、super引用的简单原型访问

调用原型上的方法时要记住使用Object.getPrototypeOf() 与call(this) ,这有点复杂难 懂,因此ES6才引入了super。简单来说,   super是指向当前对象的原型的一个指针,实 际上就是Object.getPrototypeOf(this)的值。知道这些,你就可以像下面这样简化    getGreeting()方法:

你能使用super引用来调 用对象原型上的任何方法,只要这个引用是位于简写的方法之内。试图在方法简写之外的情 况使用        super会导致语法错误,正如下例:

此例使用了一个函数作为具名方法,于是调用super.getGreeting()就导致了语法错误,因为在这种上下文中super是不可用的。

8、正式的“方法”定义

在ES6 之前,“方法”的概念从未被正式定义,它此前仅指对象的函数属性(而非数据属 性)。ES6 则正式做出了定义:方法是一个拥有[[HomeObject]]内部属性的函数,此内部属性指向该方法所属的对象。研究以下例子:

此例定义了拥有单个getGreeting()方法的person对象。由于getGreeting()被直接赋给 了一个对象,它的[[HomeObject]]属性值就是person。而另一方面,shareGreeting()函数没有被指定[[HomeObject]]属性,因为它在被创建时并没有赋给一个对象。大多数情况 下,这种差异并不重要,然而使用super 引用时就完全不同了。
任何对super的引用都会使用[[HomeObject]]属性来判断要做什么。第一步是在[[HomeObject]]上调用Object.getPrototypeOf()       来获取对原型的引用;接下来,在该原型上查找同名函数;最后,创建this绑定并调用该方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值