元编程

111 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

什么是元编程?

元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作维基百科 上将元编程描述成一种计算机程序可以将代码看待成数据的能力。

ES5之后,javascript支持了 [Proxy] 和 [Reflect] 对象。我可以利用这两个方法编写通过改变对象自身,或者操作自身行为。来获得元编程的体验。

元编程在运行或者编译时。可以查看自身或者修改自身。把对逻辑的关注转向对自身的关注。
那javascript中有哪些是元编程的能力呢?

javascript中有哪些是元编程?

通过Symbol公开符号去覆盖原本的的特性,比如说类型转换等。

关于Symbol公开符号的详细,可以查看我的这篇文章symbol的基本使用和公开符号

Proxy 和 Reflect

通过代理来拦截自定义对象的各种属性和底层操作。使用Reflect来提供工具模拟。

尾递归优化TCO

通过尾递归优化这样的语义特性。可以把程序的关注点从自身转移到javascript引擎之上。让程序达到优化的运行效果。关于TCO(Tail Call Optimization) 尾递归优化,可以查看这篇文章关于递归、PTC、TCO

其他

除了上面说到一些典型的方法之外,还有其他的一些javascript提供给我们的元编程能力,比如说:
、元属性等等。
函数名称:函数、对象等等可以通过.name属性获取到名称。
元属性:new.target能够指向调用 new 的目标构造器。

    class Test { 
      constructor() { 
      if (new.target === Test) { 
      console.log( "Test" ); 
      } 
      else { 
      console.log( "other" ); 
      } 
      } 
     } 
     class Test1 extends Test {} 
     var a = new Test(); // Test 
     var b = new Test1(); // other