看 wind 源码的时候,脑子里蹦出一个词:MetaProgramming… 当然,我不是在说 wind 就是元编程了,只是觉得 JS 的动态性,很易于进行元编程。
我理解的元编程:用代码做为数据动态产生代码,用程序写程序。
JS 无需编译,所以有天然优势,运行时操作类或函数易如反掌。
比如说,需要动态给类的对象织入方法,代码是在程序运行时传入的,可以这么干:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var metaClass = function () { }; var makeFunction = function (obj, name, fnBody) { obj[name] = new Function(fnBody); return obj; }; metaClass.prototype.addFunction = function (name, fnBody) { return makeFunction(this, name, fnBody); }; //测试代码 var code = 'console.log("hello");'; var metaObj = new metaClass(); metaObj.addFunction('hello', code).hello(); |
当然,这个hello() 的调用有点先知先觉了,呵呵且看:
1 2 3 4 |
metaClass.prototype.run = function(name){ return this[name](); }; metaObj.run('hello'); |
而且,和写 元编程之javascript 的这位仁兄比起来,小巫见大巫了。
又是捉急的一天,愿元编程能带来好运 🙂
打赏作者
您的支持将激励我继续创作!