Proxy本意是代理,这里可以翻译为代理器。用来在对象前面建立一层代理,在操作对象之前先经过代理进行拦截。
示例
JavaScriptvar a = {hello: '1'};
var obj = new Proxy(a, {
get: function (target, propKey, receiver) {
console.log(`getting ${propKey}!`);
return Reflect.get(target, propKey, receiver);
},
set: function (target, propKey, value, receiver) {
console.log(`setting ${propKey}!`);
return Reflect.set(target, propKey, value, receiver);
}
});
obj.a = 1;
obj.hello = 2;
console.log(a);
输出
setting a! setting hello! { hello: 2, a: 1 }
function setProxy(app) { return new Proxy(app, { get(target, propKey, receiver) { if (propKey in target.$data) { return target.$data[propKey]; } if (propKey in target) { return Reflect.get(target, propKey, receiver); } throw new Error(`${propKey} is not found in object`); }, set(target, propKey, value, receiver) { if (propKey in target.$data) { target.$data[propKey] = value; target.element.innerHTML = target.render(); return true; } if (propKey in target) { return Reflect.set(target, propKey, value, receiver); } throw new Error(`${propKey} is not found in object`); } }) } function createApp(config) { var app = Object.assign({ el: '', template: '', components: {}, props: {}, data() { return {}; }, computed: {}, watch: {}, methods: {}, render() { var innerHTML = this.template; for (var i in this.$data) { innerHTML = innerHTML.replace(`{{ ${i} }}`, this.$data[i]); } return innerHTML; }, }, config); // 初始化元素 if (app.el == '') { throw new Error('el is required'); } app.element = document.querySelector(app.el); // 初始化data if (app.data) { app.$data = app.data(); } app.proxy = setProxy(app); return app.proxy; }
本文作者:谭三皮
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!