Proxy 可以拦截对象的读取、修改遍历等操作,这个polyfill只支持get和set。
通过defineProperty和VBScript实现。
低版本浏览器Object.defineProperty用__defineGetter__、__defineSetter__实现。
所以target的属性必需先定义。
调用例子:
var person = {
name: "张三"
};
var proxy = new Proxy(person, {
set:function(target, property, value) {
if(property in target) {
alert("set "+property+":"+value);
}else{
throw "Property \"" + property + "\" does not exist.";
}
}
});
proxy.name="李四";
代码https://github.com/linsk1998/skyjs/blob/master/scenario/proxy/proxy.js
演示http://raw.githack.com/linsk1998/skyjs/master/scenario/proxy/index.html