开启掘金成长之旅!这是我参与「掘金日新计划 · 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