Query = {} Query.new = function() { var queryAttributes = { filters: [], beginDate: null, endDate: null, attribute: null } var queryObj = { where: function(filter) { queryAttributes.filters.push(filter) return queryObj; }, between: function(begin,end) { queryAttributes.beginDate = begin queryAttributes.endDate = end return queryObj; }, for: function(attributeName) { queryAttributes.attribute = attributeName return queryObj; }, toMapping: function() { return queryAttributes; } } return queryObj; } var dailyWidgetQuery = Query.new().for('widgets').where({name: 'glen'}).where({type: 'lame'}).between(1,6) dailyWidgetQuery.toMapping()