ES6-11学习笔记--Reflect

Reflect 映射

将Object属于语言内部的方法放到Reflect上
修改某些Object方法的返回结果,让其变得更合理
让Object操作编程函数行为
Reflect对象的方法与Proxy对象的方法一一对应
 
 
Object的一些方法抽离到Reflect,减小Object体量,增加代码可读性:
let obj = {}
let newVal = ''
Reflect.defineProperty(obj, 'name', {
    get() {
        console.log('get');
        return newVal
    },
    set(val) {
        console.log('set');
        newVal = val
    }
})

  

让原有方法增加返回值,让方法更加合理
Object.defineProperty() // 没有返回值
Reflect.defineProperty() // 返回布尔值

  

以前的命令式操作改为函数式操作:
console.log('assign' in Object); // true
console.log(Reflect.has(Object, 'assign')); // true

  

Reflect和Proxy一一对应:
let arr = [1, 2, 3]
arr = new Proxy(arr, {
    get(target, prop) {
        console.log(`target:${target}  prop:${prop}`);
        // return prop in target ? target[prop] : 'error'
        return prop in target ? Reflect.get(target, prop) : 'error'
    }
    // 其他set等钩子也是一一对应
})
console.log(arr[1]);

  

放弃安逸,持续努力——成长
原文地址:https://www.cnblogs.com/MarsPGY/p/14832110.html