// proxy : 访问代理
const person = {
name: 'foo',
age: 20,
}
const personProxy = new Proxy(person, {
get(target, property) {
console.log('get', target, property)
return target[property]
},
set(target, property, value) {
console.log(target, property, value)
return target
},
deleteProperty(target, property) {
console.log('delete', property, target)
delete target[property]
console.log('inside',person)
},
has(target, prop) {
console.log( 'proxy result', prop in target)
return target
},
getPrototypeOf(target) {
console.log( 'getPropertyOf', target)
return target
},
setPrototypeOf(target) {
console.log( 'setProperty', target)
return target
},
isExtensible(target) {
console.log( 'isExtensible', target)
return target
},
preventExtensions(target){
Object.preventExtensions(target);
return true;
},
getOwnPropertyDescriptor(target, prop) {
let x= Object.getOwnPropertyDescriptor(target, prop)
console.log('gg',x)
},
ownKeys(target){
let x= Object.getOwnPropertyNames(target)
let y = Object.getOwnPropertySymbols(target)
let z = Object.keys(target)
let j = Reflect.ownKeys(target)
console.log('called',x)
return x
}
})
// proxy内先打印
// 把personProxy 当作 person 对象来用 =》 personProxy 会对proxy 监视 + 操作 , 具体操作在 proxy 的方法里 实现
// personProxy.get(person, name) // 错误写法 第一次尝试
// 对象监视
// personProxy.name
// personProxy.sex = 0
// delete personProxy.age
// console.log(1,'age' in person)
// console.log(2,'age' in personProxy)
// console.log('personProxy is', personProxy)
// Object.getPrototypeOf(personProxy)
// Object.getPrototypeOf(person)
// Object.isExtensible(personProxy)
// Object.preventExtensions(personProxy)
// Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。
// Object.getOwnPropertyDescriptor(personProxy,'age')
//Object.defineProperty(person, 'gender', {
// enumerable: true, //enumerable 定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。
// configurable: false, //不可配置的
// writable: false, // 不可写的, 不能被重新赋值
// value: 0
//})
// Object.getOwnPropertyNames(personProxy)
// Object.getOwnPropertySymbols(personProxy)
// Object.keys(personProxy)
// Reflect.ownKeys(personProxy)
// 函数 监视
// apply
// construct