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))
一起设计吧