proxy 元编程的大杀器
什么是元编程呢?
答:是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作,很多情况下与手工编写全部代码相比工作效率更高
编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射 ——摘自《百度百科》
元编程一言以蔽之,就是用代码生成(操纵)代码。——摘自《知乎》猫杀 。
Proxy的概念
1:是一种高级的编程概念
2:用于修改某些操作的默认行为
3:在语言层面作出修改,所以属于一种元编程
4:对编程语言进行编程
总结:可以理解为在目标对象前加一个安检装置,任何进入或者出去的对象访问都必须先通过这层安检装置,因此提供了一种机制,可以对外界的访问进行过滤和改写(可以看成地铁的安检)。
在讲proxy之前,我先讲一点javascript书写小技巧,懂得人就不说了
1 const obj = { 2 func1: function () { 3 4 }, 5 func2(){ 6 } 7 }; 8 console.log(obj);
控制台输出

所以说 obj 中func1 和 func2 中的写法是等价的。
const name = 'Tom'; const info = {name}; console.log(info);
控制台输出

还有就是 const obj={name:"tom"} 等价 与 const name = 'Tom'; const info = {name};
废话不多,大家看一个例子
1 const obj = { 2 _name: '', 3 prefix: '', 4 get name() { 5 return this.prefix + ' '+ this._name 6 } 7 , set name(str) { 8 this._name = str 9 } 10 }; 11 obj.name = 'es2016'; 12 console.log('问题1',obj.name); //es2016 13 obj.prefix = 'hello'; 14 console.log('问题2',obj.name); //hello es2016
大家仔细看一下,首先赋值 obj.name='es2016' 之后输出 obj.name,输出正常,之后我们赋值了obj.prefix,并且没有改动obj.name,但是当我们再次输出obj.name的时候发现其值变了,这是的我们在回头看obj的对象申明里面我给 obj的name分别给了get 和 set 方法

浙公网安备 33010602011771号