(function($) { $.extend({"newPlugin": function(settings) { var publicObj = {}; var _globals = {}; publicObj.version = '1.0'; var _helper = { "registerPlugin": function(name, object) { var plugin; var hooks = new Date(); hooks = $.extend(true, {}, object.hooks); plugin = object.functions !== undefined ? object.functions : {}; _globals.plugins[name] = plugin; }, "checkDependencies": function() { var dependenciesPresent = true; return dependenciesPresent; } }; var defaultSettings = { }; _globals.settings = {}; _globals.dependencies = { "jquery1.6+": function() { } }; publicObj.test = {a:1, b:function(){}}; /** * * @returns {Date} */ publicObj.init = function() { }; publicObj.myFunction = function() { _helper.doHook('myFunction'); }; return publicObj; } }); })(jQuery); newPlugin().init(); newPlugin().test.a;