元编程的应用

来源:互联网 发布:linux查看jdk版本命令 编辑:程序博客网 时间:2024/05/02 05:56

 元编程的应用

 

 

下面通过几个实例来帮助理解元编程思想。
(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客户端开发》作者 涂传滨,杨先亭 等推荐