什么是元编程?
维基百科:
元编程
(meta programming)是一种编程技术,编写出来的计算机程序能够将其他程序作为数据来处理。意味着可以编写出这样的程序:它能够
读取、生成、分析或者转换
其它程序,甚至在运行时修改程序自身
(反射)。
举个例子,如果想要查看对象a和对象b之间的关系,是否是通过[[prototype]]
链接的。我们可以通过a.isPrototype(b)
,
这就是一种元编程形式,称为自省。
用for…in 循环枚举对象的键,或者检查一个对象是否是某个“类构造器”的实例,也都是
常见的元编程例子。
元编程中 元 的概念,可以理解为 程序 本身,元编程关注以下的一点或几点:
- 运行时修改语言结构,这种现象被称为 反射;
- 自省:代码检视自己;
- **自我修改:**代码修改自己;
- **调解:**代码修改 默认的语言行为 而使其他代码受到影响。
- 生成代码。
1、自省
代码能够自我检查、访问内部属性,获得代码的底层信息!
// 访问对象自身属性
var users = {
'Tom': 32,
'Bill': 50
};
Object.keys(users).forEach(name => {
const age = users[name];
console.log(`User ${
name} is ${
age} years old!`);
});
2、自我修改
代码可以修改自身属性或者其他底层信息!
let a = 1;
if (a == 1 && a == 2 && a == 3) {
console.log("元编程");
}
上述代码,正常情况下是没办法满足条件打印输出的。
但是,利用元编程,有办法可以办到。
// 修改自身
let a = {
[Symbol.toPrimitive]: ((i) => () => ++i)(0);
}
if (a == 1 && a == 2 && a == 3) {
console.log("元编程")