首页>>新闻中心>>ES6学习方法

ES6一Proxy

来源: 本站    发布时间: 2021-03-01 22:10    阅读次数:

let obj = {}
    let newVal = ""
    Reflect.defineProperty(obj, "name", {
        get() {
           return newVal
        },
        set(val) {
            newVal = val
        }
    })
    obj.name = "Yan"
    console.log(obj.name)
    // try{
    //   Object.defineProperty()
    // }catch (e) {
    //
    // }
    // if(Reflect.defineProperty()) {
    //
    // }else {
    //
    // }
    console.log("assign" in Object) //true
    console.log(Reflect.has(Object, "assign")) //true

    let tokenUserinfo = {
        username : "yangang",
        age : 34,
        _password : "***"
    }
    tokenUserinfo = new Proxy(tokenUserinfo, {
        get(target, prop) {
            if(prop.startsWith("_")) {
                throw new Error("不可方位")
            }else{
                return  Reflect.get(target, prop)
                //return target[prop]
            }
        },
        set(target, prop, value) {
            if(prop.startsWith("_")) {
                throw new Error("不可设置")
            }else{
                //target[prop] = value
                Reflect.set(target, prop, value) //
                return true
            }
        },
        ownKeys(target) {  // 循环遍历
            return Reflect.keys(target).filter(key => !key.startsWith("_"))
           // return  Object.keys(target).filter(key => !key.startsWith("_")) //过滤下划线为_的键值属性
        },
        deleteProperty(target, p) {
            if(p.startsWith("_")) {
                throw new Error("不可删除")
            }else{
                Reflect.deleteProperty(target, p)
                // delete target[p]
                return true
            }
        }
    })

    console.log(tokenUserinfo.age)

    try {
        console.log(tokenUserinfo._password)
    }catch (e) {
        console.log(e.message)

    }
    let sum = (...args) => {
        let num = 0
        args.forEach(item => {
            return num += item
        })
        return num
    }
    sum = new Proxy(sum, {  // 处理函数的返回结果
        apply(target, thisArg, argArray) {

            return Reflect.apply(target, target, [...argArray]) * 2
           // return target(...argArray) * 2
        }
    })

    console.log(sum(1, 2))
    console.log(sum.call(null,1,2,3))
一起设计吧
上一篇: ES6 代理 Proxy
下一篇: ajax 说明
BACK