2013-05-02 96 views
1

我正在查看连接js库的源代码,他们做了一些有趣的事情。他们将来自proto的所有方法合并到应用程序对象中。这个设计模式是否有名字?这是什么JS设计模式?

function createServer() { 
    function app(req, res, next){ app.handle(req, res, next); } 
    utils.merge(app, proto); 
    utils.merge(app, EventEmitter.prototype); 
    app.route = '/'; 
    app.stack = []; 
    for (var i = 0; i < arguments.length; ++i) { 
    app.use(arguments[i]); 
    } 
    return app; 
}; 

回答

1

我认为最接近它的将是一个mixin。也就是说,你需要一个对象的现有定义(在本例中是一个函数),然后将另一个对象的属性复制到它上面。

您可以通过阅读source知道该方法只是将属性从源对象复制到目标对象。

+0

我最近偶然发现了这些merge()行。所以我想知道的是,为什么这种mixin方法优于继承?为什么不将proto/connect的原型设置为EventEmitter的一个实例? – matths 2014-04-10 14:33:54

+1

@matths它允许一种*多重继承*很容易。对许多事情来说也更简单,你真的希望代理链是SomeObject - > Iterable - > Cloneable - > Cacheable等 – alex 2014-04-10 23:58:52