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的对象申明里面我给 objname分别给了get set 方法

 

 

 

posted @ 2017-08-31 17:09  PR都像梅超风  阅读(141)  评论(0)    收藏  举报