:今天说一下对象的扩展。
ES6中,允许在大括号里面直接写入变量和函数,作为对象的属性和方法,
![](https://img.haomeiwen.com/i27761611/d9eb846eeb403c38.png)
可以看到这两种写法结果一样,上面呢个更为简洁;属性名就是变量名,属性值就是变量值。
![](https://img.haomeiwen.com/i27761611/07646ebfdf6d214e.png)
除了属性简写,方法也可以简写;
![](https://img.haomeiwen.com/i27761611/cb616890fc6e257b.png)
下面说一下ES6中一共有五种方法可以遍历对象的属性。
1》;for...in
循环遍历对象自身和继承的可枚举属性
2》:Object.keys(obj)
返回一个数组包含对象自身的所有可枚举属性
3》:Object.getOwnPropertynames(obj)
返回一个数组,包含对象自身所有属性的键名
4》:Object.getOwnPropertySymbols(obj)
返回一个数组,包含对象自身的所有Symbol属性的键名;
5》Reflect.ownKeys(obj)
返回一个数组,包含对象自身的所有键名;
对象的扩展运算符,
昨天讲到了数组的扩展运算符,今天讲一下对象中怎么运用;
![](https://img.haomeiwen.com/i27761611/670466c816759915.png)
解构赋值必须是最后一个参数否则会报错;
![](https://img.haomeiwen.com/i27761611/8bd8aaab4119a620.png)
注意一点:解构赋值的拷贝是浅拷贝。即如果一个键的值是复杂类型的值(数组,对象,函数),那么解构赋值拷贝的是这个值的引用,而不是这个值 的副本;
扩展运算符的解构赋值,不能复制继承自原型对象的属性。
![](https://img.haomeiwen.com/i27761611/2e22e796004d6789.png)
o3复制了o2的属性,但是并没有复制他的原型对象o1的属性;
对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中;
![](https://img.haomeiwen.com/i27761611/919cf73d29b640ae.png)
数组是特殊的对象,对象的扩展运算符也可以用于数组
![](https://img.haomeiwen.com/i27761611/9dff491d93941b61.png)
如果扩展运算符后面是一个空对象,则没有任何效果。
网友评论