数据代理,也叫数据劫持,意思是,当访问/设置数据时,在目标数据前架设一层”拦截”,外界对该数据的访问都必须通过这一层拦截,以下列出常用的几种代理方式
- Object.prototype.__ defineGetter __ / Object.prototype.__ defineSetter __ 这是一个非标准的方法,并且已经从web标准中删除,目前浏览器大部分都还支持,用法如下:
obj.__defineGetter__(prop, function(){
return obj[prop]
})
obj.__defineSetter__(prop,function(value){
obj[prop] = value
})
调用实例的方法时,以当前实例为上下文
- proxy, 是ES6新增的一个特性,可以通过new Proxy代理对象
let p = new Proxy(target , handler)
- Object.defineProperty() , 可以配合 Object.getOwnPropertyDescriptor() 来使用
Object.defineProperty(obj , prop , descriptor)
Object.getOwnPropertyDescriptor(obj, prop)