2013-05-02 139 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