【深入浅出ES6】对象

对Object的扩展

对象的类别
  1. 普通对象
  2. 奇异对象
  3. 标准对象
  4. 内置对象
对象字面量语法的扩展
  1. 属性初始化器的简写语法(和对象key同名的变量名可以省略)
let time = 500, name = 'Tom'
let obj = {
    name,
    time
}
复制代码
  1. 属性方法的简写语法
var person = {
    name: 'Tom',
    sayHello(){
        console.log('hello world')
    }
}
复制代码
  1. 使用[]包含计算属性变量名,特别用于遍历数组创建对象时属性名是未知的情况
var arr = ['name','age','weight']
var value = ['Tome','18','130']
var person = Object.create(null)
for(let key in arr){
    person = Object.assign(person, {
        [arr[key]]: value[key]
    })
    
}
console.log(person) // {name: "Tome", age: "18", weight: "130"}
复制代码
新增的Object方法
  1. Object.is() 用于比较严格相等,修复了'==='部分怪异行为
    console.log(+0 === -0) //true
    console.log(Object.is(+0, -0)) //false
    
    console.log(NaN === NaN) //false
    console.log(Object.is(NaN, NaN)) //true
    复制代码
  2. Object.assign()
    • 混入(Mixin),第一个参数为属性接受者对象,将后面多个供应者对象的属性与方法统一合并到接受者上,并且将接受者对象返回;
    • 命名相同的属性,后者供应者对象的属性会覆盖前面的
    • 供应者的访问器属性会被转换成接受者的数据属性
     var o, d, obj={}
    
     o = { get foo() { return 17; } };
     Object.assign(obj, o)
     console.log(obj) // {foo: 17}
    
     d = Object.getOwnPropertyDescriptor(obj, "foo");
     console.log(d) // {value: 17, writable: true, enumerable: true, configurable: true}
    复制代码
    使用Object.assign()后,o的get属性被转换成obj的数据属性,也就是d.value = 17
更改对象的原型

ES5中添加了Object.getPrototypeOf()方法来获取指定对象的原型 ES6中添加了修改指定对象原型的方法:Object.setPrototypeOf(指定对象, 目标原型),这样设置完后,指定对象就继承了新的目标原型的方法和属性

使用super引用访问对象的原型

super是指向当前对象的原型的一个指针,实际上就是Object.getPrototypeOf(this)的值,使用super引用后,便可以访问原型对象的任何属性和方法 注意:super只能在ES6语法的简写属性方法中使用,否则会报错

// 在ES6简写方法语法中引用super可以正常访问
var person= {
getName(){
	console.log('super',super.constructor())
}}
person.getName() 

// 使用传统的属性方法的语法,引用super会报错
var person= {
getName: function(){
    // Uncaught SyntaxError: 'super' keyword unexpected here
	console.log('super',super.constructor())
}}
person.getName()
复制代码

转载于:https://juejin.im/post/5c7cc582e51d453ecd04a763

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值