ES6-对象

来源:互联网 发布:淘宝最低价插件 编辑:程序博客网 时间:2024/05/21 10:24

ES6学习之对象

学习ES6对象的一些新属性,主要参照ES6标准入门一书。

方法的name属性

对对象中的方法使用==name==属性,会返回方法名。对方法中的==get,set==函数使用name属性,会返回==get/set+方法名==。

var person = {    sayName () {        console.log(this.name);    },    get firstName () {        return 'lalalala';    }}person.sayName.name // "sayName"person.firstName.name // "get firstName"

Object.is()

==Object.is==方法和===严格比较运算符具有相同的效果。除了对+0和-0,还有NaN的表现效果不一致。

+0 === -0 // trueNaN === NaN // falseObject.is(+0, -0) // falseObject.is(NaN, NaN) // true

Object.assign()

==Object.assign==方法只是简单的用后面对象的属性,替换前面对象的相应属性,并不具备“深拷贝”的功能。假如有多个对象的时候,后面的对象会一次替换前面对象的属性。替换后的属性,引用相同的引用类型。
该方法有很多用途:
1. 为对象添加属性

class Point {    constructor (x, y) {        Object.assign(this, {x, y});    }}
  1. 为对象添加方法
Object.assign(SomeClass.prototype, {    someMethod () {    ...    },    anotherMethod () {    ...    }});
  1. 克隆对象
function clone (origin) {    let originProto = Object.getPtototypeOf(origin);    return Object.assign(Object.create(originProto), origin);}
  1. 合并多个对象
const merge = (target, ...sources) => Object.assign(target, ...sources);

属性的可枚举性

对象的每个属性都有一个描述对象(Descriptor)。==Object.getOwnPropertyDescriptor==方法可以获取该属性的描述对象。

let obj = { foo: 123};Object.getOwnPropertyDescriptor(obj, 'foo');// { value: 123, //值//  writable: true, //是否可写//  enumerable: true, //可枚举性//  configurable: true //是否可以修改以上属性}

es6中,所有对象的class方法都是不可枚举的。

对象属性的遍历

  1. for…in返回自身和继承的可枚举属性(不含Symbol)
  2. Object.keys返回一个数组,包含自身的可枚举(不含继承和Symbol)
  3. Object.getOwnPropertyNames(obj)返回数组,包含所有属性(不含继承和Symbol,但包含不可枚举)
  4. Object.getOwnPropertySymbols(obj)返回数组,包含Symbol
  5. Reflect.ownKeys(obj)返回数组,包含自身所有(含Symbol,含不可枚举)
  6. Reflect.enumerate(obj)返回一个Iterator对象,其他与fot…in相同

__proto__属性

这个属性没有写入es6正文,标准规定只有浏览器必须部署,其他环境不一定要部署。所有,最好不要使用这一属性,而是使用替代属性如==Object.setPrototypeOf(),Object.getPrototypeOf()或Object.create()==。

0 0
原创粉丝点击