js数据属性代理

数据代理,也叫数据劫持,意思是,当访问/设置数据时,在目标数据前架设一层”拦截”,外界对该数据的访问都必须通过这一层拦截,以下列出常用的几种代理方式

  1. Object.prototype.__ defineGetter __ / Object.prototype.__ defineSetter __ 这是一个非标准的方法,并且已经从web标准中删除,目前浏览器大部分都还支持,用法如下:
  obj.__defineGetter__(prop, function(){
    return obj[prop]
  })

  obj.__defineSetter__(prop,function(value){
    obj[prop] = value
  })

调用实例的方法时,以当前实例为上下文

  1. proxy, 是ES6新增的一个特性,可以通过new Proxy代理对象
   let p = new Proxy(target , handler)
  1. Object.defineProperty() , 可以配合 Object.getOwnPropertyDescriptor() 来使用
  Object.defineProperty(obj , prop , descriptor)
  Object.getOwnPropertyDescriptor(obj, prop)

你可能感兴趣的:(js数据属性代理)