在connect.js的源碼中,用到了一個工具函數包,utils-merge,做用很簡單,就是合併屬性從一個對象到另外一個對象中,實現代碼很簡單。git
/** * Merge object b with object a. * * var a = { foo: 'bar' } * , b = { bar: 'baz' }; * * merge(a, b); * // => { foo: 'bar', bar: 'baz' } * * @param {Object} a * @param {Object} b * @return {Object} * @api public */ exports = module.exports = function(a, b){ if (a && b) { for (var key in b) { a[key] = b[key]; } } return a; };
這是一個js淺拷貝,代碼很簡單,在connect.js源碼中,能夠看到使用該函數後,代碼塊更加的獨立分離,邏輯清晰。在程序設計中,能夠學習該思想。下邊根據本身的學習體會,寫一個小的練習。github
// 定義一個函數對象 var func = function() { func.exec() }; var merge = function(a,b) { if(a && b) { for(var key in b) { a[key] = b[key]; } } } merge(func,proto); var proto = {}; proto.exec = function() { var data = "hello world"; console.log(data); }
這種分離思想,有種委託的概念。將要執行的函數,在另外一個函數中進行封裝定義,而後再定一個函數對象做爲代理,去執行函數。api