defineProperty、defineProperties和proxy的基本使用

104 阅读1分钟

1、defineProperty

Object.defineProperty方法会在对象上直接定义个新的属性,或者修改现有的属性,并返回此对象
Object.defineProperty方法有以下几个属性configurable、writable、enumerable和value

configurable属性是否可以被删除,默认值为true 代表可以被删除 writable 是否能修改属性值,默认为true 代表可以被修改 value就是对象属性的默认值,优先级比定义的优先级大 enumerable 表示是否可以通过for in来循环访问属性,默认为true 代表可以被访问

let obj = {
  name: '颤三',
  age: 30
} 
 Object.defineProperty(obj, name, {
  configurable: false
  writable: false,
  value: 'lisi'
  enumerable: false
})

2、defineProperties

Object.defineProperties 可以对对象的多个属性进行劫持
Object.defineProperties(obj,{
  name:{
    enumerable: false
  },
  age:{
    enumerable: true
  }
})

3、Proxy

Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”
let p = {
  name: '颤三',
  age: 30
}
let p2 = {
  get(obj,key){
    return obj[key]
  },
  set(obj,key,val){
    obj[key] = val
  }
}
Proxy 对象的所有用法,都是下面这种形式,不同的只是handler参数的写法
p 代表源对象,p2 代表需要操作的对象
let proxy1 = new Proxy(p,p2)
console.log(proxy1.name) // 颤三
proxy1.name = '牛二'
console.log(proxy1.name) //牛二