{"id":22314364,"url":"https://github.com/undercloud/atomy","last_synced_at":"2025-10-11T15:02:00.637Z","repository":{"id":32048162,"uuid":"35619736","full_name":"undercloud/atomy","owner":"undercloud","description":"Java Script OOP","archived":false,"fork":false,"pushed_at":"2016-03-12T18:23:10.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-01T01:45:50.427Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/undercloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-14T15:37:55.000Z","updated_at":"2016-02-28T11:23:10.000Z","dependencies_parsed_at":"2022-09-14T16:50:45.209Z","dependency_job_id":null,"html_url":"https://github.com/undercloud/atomy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undercloud%2Fatomy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undercloud%2Fatomy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undercloud%2Fatomy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/undercloud%2Fatomy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/undercloud","download_url":"https://codeload.github.com/undercloud/atomy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245579582,"owners_count":20638676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T22:09:45.878Z","updated_at":"2025-10-11T15:02:00.536Z","avatar_url":"https://github.com/undercloud.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#Atomy\nJavaScript OOP\n\n##installaton\n`npm install atomy`\n\nBrowser\n```html\n\u003cscript src=\"/path/to/undercloud.atomy.min.js\"\u003e\u003c/script\u003e\n```\n\nNodeJS\n```js\nvar Atomy = require('atomy');\n```\n\n##class creation\n```js\nvar Animal = Atomy.extend({\n  weight: 0,\n  abilities: ['eat','breath','see'],\n  constructor: function(name) {\n    this.name = name;\n  },\n  say: function() {\n    console.log(\"I'am \" + this.name);\n  }\n})\n\nvar dogg = new Animal('Snoop');\nvar cat  = new Animal('Tom');\n\ndogg.say(); //I'am Snoop\ncat.say(); //I'am Tom\n```\n\n##inheritance\n```js\nvar Monkey = Animal.extend({\n  constructor: function(name) {\n    Monkey.superclass.constructor.call(this, name);\n  },\n  jump: function() {\n    console.log('I can jump');\n  }\n})\n\nvar monkey = new Monkey('Joe');\n\nmonkey.say(); //I'am Joe\nmonkey.jump(); //I can jump\n```\n\n##extends an existing class\n```js\nvar ReversedArray = Atomy.extend(Array, {\n  constructor: function() {\n    for (var i in arguments){\n      this.push(arguments[i]);\n    }\n  },\n  reverseSort: function() {\n    return this.sort().reverse();\n  }\n})\n\nvar ra = new ReversedArray(1,5,3,4,2);\nra.reverseSort(); //[5,4,3,2,1]\n```\n\n##instanceof\n```js\nvar Animal = Atomy.extend({/*...*/});\n\nvar Monkey = Animal.extend({/*...*/});\nvar Human  = Monkey.extend({/*...*/});\n\nvar Wolf = Animal.extend({/*...*/});\nvar Dog  = Wolf.extend({/*...*/});\n\nconsole.log(new Dog() instanceof Wolf); //true\nconsole.log(new Dog() instanceof Animal); //true\nconsole.log(new Dog() instanceof Monkey); //false\n```\n\n##constant\n```js\nvar XMath = Atomy.extend({});\n\nXMath.constant('PI', 3.14);\n\ntry {\n  XMath.PI = 0;\n} catch (e) {\n\n}\n\nXMath.PI; //3.14\n```\nAdd constant into existing objects\n```js\nAtomy.constant(window, 'MYCONST', true);\nwindow.MYCONST = false;\nwindow.MYCONST; //true\n```\n\n##private\n```js\nvar Something = Atomy.extend({\n  constructor: function() {\n    var hiddenProperty = 'Hidden Value';\n\n    Something.prototype.getHiddenProperty = function() {\n      return hiddenProperty;\n    };\n  }\n});\n\nvar s = new Something();\ns.getHiddenProperty(); //Hidden Value\n```\n\n##inject\nExtend object prototype\n```js\nvar Something = Atomy.extend({/*...*/});\n\nSomething.inject({\n  foo: 'Bar',\n  getFoo: function() {\n    return this.foo;\n  }\n});\n\nvar some = new Something();\nsome.getFoo(); //Bar\n```\nInject single property\n```js\nSomething.inject('square', function(x) {\n  return x * x;\n});\n\nsome.square(3); //9\n```\nInject into existing objects\n```js\nAtomy.inject(Array, 'reverseSort', function() {\n  return this.sort().reverse()\n});\n\nvar a = [6,7,3,4,2];\na.reverseSort(); //[7, 6, 4, 3, 2]\n```\n\n##share\nSame as `Atomy.inject` but extends only static context\n```js\nvar Something = Atomy.extend({/*...*/});\n\nSomething.share({\n  foo: 'Bar',\n  getFoo: function() {\n    return this.foo;\n  }\n});\n\nSomething.getFoo(); //Bar\n```\nShare single property\n```js\nSomething.inject('square', function(x) {\n  return x * x;\n});\n\nSomething.square(3); //9\n```\nShare existing objects\n```js\nAtomy.share(window.location, 'setHash', function(hash) {\n  this.hash = hash;\n});\n\nwindow.location.setHash('goto');\n```\n\n##singletone\n```js\nvar Animal = Atomy.extend({});\n\nAnimal.__instance__ = null;\nAnimal.getInstance = function() {\n  if(this.__instance__ === null) {\n    this.__instance__ = new Animal();\n  }\n\n  return this.__instance__;\n}\n\nvar a = Animal.getInstance();\nvar b = Animal.getInstance();\n\na === b //true\n```\n\n##namespace\n```js\nAtomy.namespace('milkyway.solar.earth');\n//window.milkyway.solar.earth\n\nvar scope = {};\nAtomy.namespace('milkyway.solar.earth',scope);\n//scope.milkyway.solar.earth\n\nAtomy.namespace('milkyway.solar.earth.life').Animal = Atomy.extend({\n  /*...*/\n});\n\nvar animal = new milkyway.solar.earth.life.Animal();\n```\n\n##isset\n```js\nAtomy.isset('window.Array.prototype.sort'); //true\nAtomy.isset('sort', Array.prototype); //true\n\nvar Animal = Atomy.extend({\n  say: function() {\n    /*...*/\n  }\n});\n\nvar monkey = new Animal();\nmonkey.isset('say') //true\n\nAnimal.abilities = []; \nAnimal.isset('abilities'); //true\n```\n\n##toString\n```js\nvar Animal = Atomy.extend({\n  toString: function() {\n    return '[object Atomy]';\n  }\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fundercloud%2Fatomy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fundercloud%2Fatomy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fundercloud%2Fatomy/lists"}