Reflect(操作对象方法另外一种形式)----ES6重刷14

在ES6推出之前,对对象的操作的是命令式行为,比如为对象增加属性并赋值objectName[attrName] = value,现在ES6推出一种全局对象Reflect,使对对象的操作函数行为化,比如为对象增加属性并赋值Reflect.set(objectName, attrName, value)

Reflect
一、出现的主要意义
经过ES6书中解释及个人实践,本人认为,Reflect全局对象出现的意义有两大点
1、配合Proxy全局对象的出现【其两者方法一一对应】
2、将对象的命令式操作行为改变为函数式操作行为【本人看着有点爽,喜欢函数模块处理的方式】

二、其相应的常用方法【增删改查】

// 喜欢在对象上加层操作中间件
const obj = new Proxy({}, {})

// 增加属性
Reflect.set(obj, 'add', 'add')
console.log(obj) // Proxy {add: "add"}

// 修改属性
Reflect.set(obj, 'add', 'changeAdd')
console.log(obj) // Proxy {add: "changeAdd"}

// 查询属性
console.log(Reflect.has(obj, 'add')) // true

// 删除属性
Reflect.deleteProperty(obj, 'add')
console.log(obj) // Proxy {}

注意:当需要添加属性时,且属性值为以一个函数,我们可以使用this来指代数据源object

const obj = new Proxy({
  'first': 'first',
  'second': 'second',
  'third': undefined,
}, {
  get: (target, property) => target[property] === undefined ? "暂无数据" : target[property],
})

// 布置自定义Iterator接口
Reflect.set(obj, Symbol.iterator, function* () {
  for (const key in this) { // this指代数据源obj,还可以这么玩,有意思
     yield this[key]
  }
})
console.log([...obj]) // ["first", "second", "暂无数据"]

剩余就不多加累述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值