var StrategyContext; // generic strategy factory (function($module) { "use strict"; Object.defineProperties($module, { StrategyContext: { value: {} } }); Object.defineProperties(StrategyContext, { new: { // value: function(strategy, ...args) { value: function(strategy) { var _strategy = strategy, ConstructorReference = StrategyContext.new; if (!(this instanceof ConstructorReference)) { return new ConstructorReference(strategy); } this.strategy = function(strategy) { if (strategy) { _strategy = strategy; } return _strategy; }; return this; } } }); })(window);