元编程的应用
下面通过几个实例来帮助理解元编程思想。
(1)根据现有的对象构造生成新的构造方法,使新对象构造的实例比原对象构造实例拥有更丰富的表现力。如:
function createConstructor(fn)
{
var p= fn.prototype;
function func(){}
//保持原有fn的prototype chain
func.prototype = p;
//保持对象构造信息的正确性
func.prototype.constructor = p. constructor;
//定义新对象构造
func.prototype.a="a";
func.prototype.b="a";
func.prototype.ma=function(){};
//返回新的对象构造
return func
}
当某种类型对象都具有一定的共同点时,即可采用以上代码创建该类型的对象实例。这种创建方式的实质就是原型链(Prototype Chain,参见下一章“JavaScript运行机制”)。
(2)对原function的扩展,并且这些扩展不会影响原function本身的语法结构及功能。如:
function createFunc (fn)
{
//原fn引用
var f = fn;
//定义构造新功能的信息
function func()
{
//dosomething为 fn扩展的功能代码
return f.apply(this,arguments);
}
//保持原有fn的prototype chain
func.prototype = fn.prototype
//返回新的func
return func
}
如上述代码所示,createFunc将返回一个新的funcion。createFunc的入参是一个function,在createFunc内利用变量f保存对这个function的引用,接着定义了一个新的funcion——func。func有双重作用:
原封不动地执行f所指向的原函数。
在func内可以嵌入想要的代码逻辑,如打印日志等。尤为神奇的是,对func内部所附加代码的添加删除并不影响原function的执行逻辑。
在JavaScript中实践元编程的思想,有着各种不同的实现方式。元编程可以理解为一种编程模式而不是具体的编程手段。
本文由《征服RIA:基于JavaScript的Web客户端开发》作者 涂传滨,杨先亭 等推荐