{"_id":"classifyjs","_rev":"34-aa18cc52970bcab9d4b8c6d1076abd68","name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","dist-tags":{"latest":"0.14.1"},"versions":{"0.7.5":{"name":"classifyjs","description":"Classify is a Javascript library that allows for cross platform classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.7.5","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.7.5","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.2","_nodeVersion":"v0.7.6-pre","_defaultsLoaded":true,"dist":{"shasum":"3a68333ede1802360bfc6f0290fe188e6f9faabe","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.7.5.tgz","integrity":"sha512-ZF1n3NiHwW0BDaaOoQBOzE/zHqWyhJU+Qi0JN1AhvIjTZWHRxmuMvmb2t+AMqGfLFUwsMDivICXIiX92QJxzFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIACNm5fawzGW3fiKc7D4yzRcCJxhFnii8J3b0iVpGO08AiBE5+j79v0i/fPWl+HysiqwRY2tEsyXX/rNwD2h0oAfAg=="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.8.5":{"name":"classifyjs","description":"Classify is a Javascript library that allows for cross platform classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.8.5","homepage":"http://github.com/weikinhuang/Classify","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.8.5","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.2","_nodeVersion":"v0.7.6-pre","_defaultsLoaded":true,"dist":{"shasum":"3c7f9473896abd3fd4fd7977c82adabcffa90639","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.8.5.tgz","integrity":"sha512-wYCsingblHa++Gsmzh/zOl4A1xVa1T//5Rv5ul+YtI46KWaYe2g1alixKHE3XqUMb5AnPt3PrDY06Mk+CFxWiw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIErSTSRAnCtgVBcJoxWdA9/Ms5u+aRJSTZAl0GfNI9SbAiEAyKpQbfXRTib7q4M2syowg1L325Rz8pkFDcI00fkYw8g="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.9.5":{"name":"classifyjs","description":"Classify is a Javascript library that allows for cross platform classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.9.5","homepage":"http://github.com/weikinhuang/Classify","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.9.5","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.2","_nodeVersion":"v0.7.6-pre","_defaultsLoaded":true,"dist":{"shasum":"020218a87502e585ea3866727c0ba0290be9522b","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.9.5.tgz","integrity":"sha512-7R+pFRV0uLVuFA1IMdlp06DEEPBGiwg3LI8hgLuKpD3Qh+yIDNPvbMP3KXYpXWJv0wMVipxOgpGzu0XC143srQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICxbkRbszWetVNkZPavaYuiSQuTLm1la0QCkSQPnMTNtAiEA1SGF9vd9Qj5HOou8qeFfJ/ODHbA5jXVIInX5p9PHAT8="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.9.7":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.9.7","homepage":"http://github.com/weikinhuang/Classify","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.9.7","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.19","_nodeVersion":"v0.6.17","_defaultsLoaded":true,"dist":{"shasum":"36bda7bd435741e47eb3360748a1cac31118f5f1","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.9.7.tgz","integrity":"sha512-FIPpnlvSYTu9Mzwnx+h2PZg77TllSxTQ1tgq0YEzxbCUJB40KwLe5K6Yi1CpkdhCTVsUSgTcGaL2YPO6or3wfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAi0dMM5VOjVoXKRX64/TlWQqsGCN8EWhRDX7lMUVR7uAiBtImsp768IPHnS2OHi31h6TFqJLNwapA5Y6B2X6rJHTQ=="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.9.8":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.9.8","homepage":"http://classifyjs.com","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.9.8","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.19","_nodeVersion":"v0.6.17","_defaultsLoaded":true,"dist":{"shasum":"5ce595e68c0e34f042a66ee8a70a66859a336721","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.9.8.tgz","integrity":"sha512-BehUusNBf2R2hLzTLN65pGFPgCVzBPgEpyggrRHd7/Xw316UDbflI8+p51QbDhBTOBdT6nxJykZqmdmgbZfZyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICGhKOLuqaiDbycyYrE+QALU+sK/H94uX0B4T6ztxPJMAiEAjg/nWpRjlwxpkXVHadvFUB+yKyYMy/Ky9HLolVcLLTU="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.9.9":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.9.9","homepage":"http://classifyjs.com","repository":{"type":"git","url":"git://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"_id":"classifyjs@0.9.9","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.19","_nodeVersion":"v0.6.17","_defaultsLoaded":true,"dist":{"shasum":"00020a4db180dc5a24dcfa11e44ee66fc1663042","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.9.9.tgz","integrity":"sha512-070HnDf2NN0dPWUv9kiGjbmDpSfM2T0y/cuCOHQn/sMqEu0+Ogbw7bu9srutBOYij09Ry6n1i6YZw78kSJkGgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTtvzS2hQqP4zU5zJ0mQMI37pK1mFUwzz2UCkmSStmcAiEAtAA8z2kCjLfmSfihkoFxpV1VeKUMnVlx4X6YPtumjKI="}]},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"directories":{}},"0.10.3":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.10.3","homepage":"http://classifyjs.com","repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","devDependencies":{"grunt":">=0.4.1","grunt-cli":">=0.1.7","grunt-compare-size":">=0.4.0-rc.3","grunt-contrib-concat":">=0.3.0","grunt-contrib-connect":">=0.3.0","grunt-contrib-jshint":">=0.4.3","grunt-contrib-qunit":">=0.2.1","grunt-contrib-uglify":">=0.2.0","grunt-contrib-yuidoc":">=0.4.0","grunt-contrib-watch":">=0.3.1","grunt-qunit-cov":">=0.3.2","grunt-saucelabs":">=3.0.8","gzip-js":"*"},"scripts":{"test":"grunt all --verbose"},"_id":"classifyjs@0.10.3","dist":{"shasum":"1f81b0cdf79509b2c50fe14934fa494b200b54e1","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.10.3.tgz","integrity":"sha512-cs+8FBrweBJduTpY1ib8SaXJ/AbjZ+3W0zZpOeS5zn9qAPQ2O1LanZeQeUsMUpgAIDtC/IkwlpRePfc65iZ4/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEeT2fapNFvBO+voY2J8D6xLjFr0be9AwVMKJwlyAvg5AiEAxQT7fEa9/ML4p7cmq+ZzviQazH/92FziMV/Migmr4bE="}]},"_from":"Classify","_npmVersion":"1.2.18","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}]},"0.11.0":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.11.0","homepage":"http://classifyjs.com","repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","devDependencies":{"grunt":">=0.4.1","grunt-cli":">=0.1.7","grunt-compare-size":">=0.4.0-rc.3","grunt-contrib-concat":">=0.3.0","grunt-contrib-connect":">=0.5.0","grunt-contrib-jshint":">=0.6.4","grunt-contrib-qunit":">=0.2.2","grunt-contrib-uglify":">=0.2.4","grunt-contrib-yuidoc":">=0.4.0","grunt-contrib-watch":">=0.5.0","grunt-qunit-cov":">=0.3.4","grunt-saucelabs":">=4.0.4","gzip-js":"*"},"scripts":{"test":"grunt all --verbose"},"_id":"classifyjs@0.11.0","dist":{"shasum":"0fe3b4854fea578625f9279179d3a5c607a424f3","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.11.0.tgz","integrity":"sha512-pTs0x4D8Lxkf/bpi+Dr+nthjxU6k9CEbh2pS0BQzusu9ZHyYKvedgkOVPXmh8QLRmlWBotntZe1MxcryKJy4Pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGAVP0kSG0jN2M7yf8SsTukVU0ONpbpOeYqA15195bSzAiA88um0zzHK9NDX8EM63hONHAqxNtLlduEHzuWwbC+jrA=="}]},"_from":".","_npmVersion":"1.2.21","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}]},"0.13.1":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.13.1","homepage":"http://classifyjs.com","repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","devDependencies":{"grunt":">=0.4.1","grunt-cli":">=0.1.7","grunt-compare-size":">=0.4.0-rc.3","grunt-contrib-concat":">=0.3.0","grunt-contrib-connect":">=0.5.0","grunt-contrib-jshint":">=0.6.4","grunt-contrib-qunit":">=0.2.2","grunt-contrib-uglify":">=0.2.4","grunt-contrib-yuidoc":">=0.4.0","grunt-contrib-watch":">=0.5.0","grunt-qunit-cov":">=0.3.4","grunt-saucelabs":">=4.0.4","gzip-js":"*","bower":"~1.2.7"},"scripts":{"test":"grunt all --verbose"},"_id":"classifyjs@0.13.1","dist":{"shasum":"c3b296a0ad148919f81b0ecf83493e5a5c205cca","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.13.1.tgz","integrity":"sha512-HjBKxrRWfNW9BNFootHncxRbP6CzQgVnbKZD3+AQHRRSdKowIGLkOZdzXW6pcHLrKXRdIdhkRdnHwu2rCYqo8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDme4tQBLoMI7mJrBQOUi1NQF3i1b23TrMRNWCxP96ufAIhALHdwXjoMNz6YUbsxIISr0VHy1Acn3sLR01el0TjIouP"}]},"_from":".","_npmVersion":"1.2.21","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}]},"0.14.0":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.14.0","homepage":"http://classifyjs.com","repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","devDependencies":{"grunt":">=0.4.2","grunt-cli":">=0.1.13","grunt-compare-size":">=0.4.0","grunt-contrib-concat":">=0.3.0","grunt-contrib-connect":">=0.6.0","grunt-contrib-jshint":">=0.8.0","grunt-contrib-qunit":">=0.4.0","grunt-contrib-uglify":">=0.3.2","grunt-contrib-yuidoc":">=0.4.0","grunt-contrib-watch":">=0.5.0","grunt-qunit-cov":">=0.3.4","grunt-saucelabs":">=5.0.0","gzip-js":"*","bower":"~1.2.8","getobject":"~0.1.0","exit":"~0.1.2"},"scripts":{"test":"grunt all --verbose"},"_id":"classifyjs@0.14.0","dist":{"shasum":"4ab096c59f05d1d5dc07268414c48841dbf610dc","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.14.0.tgz","integrity":"sha512-VBS6bMVh+OZG1Yh8kj8ArctXJA90A5hIkTMnudw7rqmw7Wxowge1Mtw/BsWA3YaXs9F9GqEy/uD66HH2db10Sg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnU1VJYTcg7iHLs0SgHezmX13VoW04APrHxi1A5XZo1AIhAM7ZkEfkyE/fbCP4WhGJ53UrhTS3w7cWvxLJHkacJqKS"}]},"_from":".","_npmVersion":"1.2.21","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}]},"0.14.1":{"name":"classifyjs","description":"Classify.js is a library that allows for cross platform and cross browser Object Oriented Javascript class definitions using classical inheritance and namespaces behind the prototype syntax in an easy to use interface function.","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"version":"0.14.1","homepage":"http://classifyjs.com","repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"},"licenses":[{"type":"MIT","url":"https://github.com/weikinhuang/Classify/blob/master/MIT-LICENSE.txt"}],"main":"dist/classify","devDependencies":{"grunt":"^0.4.5","grunt-contrib-concat":"^0.5.0","grunt-contrib-connect":"^0.8.0","grunt-contrib-jshint":"^0.10.0","grunt-contrib-qunit":"^0.5.2","grunt-contrib-uglify":"^0.5.1","grunt-contrib-watch":"0.6.1","grunt-compare-size":"0.4.0","grunt-jsdoc":"^0.5.7","grunt-qunit-cov":">=0.3.4","grunt-saucelabs":"^8.3.2","gzip-js":"*","bower":"^1.3.9","getobject":"~0.1.0","exit":"~0.1.2"},"scripts":{"test":"grunt all --verbose"},"gitHead":"3e269b80ac2cd96533489aef90d216a1367de022","_id":"classifyjs@0.14.1","_shasum":"27093e34bf2ae18bd6a213b7d9585b44a32230da","_from":".","_npmVersion":"1.4.26","_npmUser":{"name":"weikinhuang","email":"weikin.huang04@gmail.com"},"maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"dist":{"shasum":"27093e34bf2ae18bd6a213b7d9585b44a32230da","tarball":"https://registry.npmjs.org/classifyjs/-/classifyjs-0.14.1.tgz","integrity":"sha512-cz025tnoKa5q+I9fBLUjKKW66G6l/TwjZiV6s9EnmjQB12oCcL0EYVyId0Q3fc3pVROkEcD9GejBxtbx0u6ovQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCu7SOsMoFJf4uWqGP8g1sI0txzBG5QY0WyoErpBTiovQIhAMYbblUrtCikEoCqsOoPHFI6yhFNp7ToftIUIfR697If"}]}}},"readme":"[Classify.js](http://classifyjs.com) [![Build Status](https://api.travis-ci.org/weikinhuang/Classify.png?branch=master)](http://travis-ci.org/weikinhuang/Classify)\n==================================================\n\nClassify.js is a library that allows for cross platform and cross browser Object Oriented Javascript\nclass definitions using classical inheritance and namespaces behind the prototype syntax in an easy to\nuse interface function. Classify also provides \"bound\" properties that passes the calling context as\nthe first argument, and \"static\" properties for static properties and methods on the object definition.\n\nClassify is tested in IE 6+, Firefox 2+, Safari 3+, Chrome 3+, and Opera 10+, NodeJs.\n[![Selenium Test Status](https://saucelabs.com/buildstatus/classifyjs)](https://saucelabs.com/u/classifyjs)\n\nUsage\n--------------------------------------\n\n#### Creating a class\n```javascript\nvar Pet = Classify({\n\ttype : \"\",\n\teaten : null,\n\tinit : function(type) { // constructor method\n\t\tthis.type = type;\n\t\t// don't assign objects to the prototype, because it\n\t\t// will be same reference in all instances\n\t\tthis.eaten = [];\n\t},\n\teat : function(food) {\n\t\tthis.eaten.push(food);\n\t}\n});\n```\n\n#### Inheritance\n```javascript\nvar Dog = Classify(Pet, {\n\tbreed : \"\",\n\tinit : function(breed) {\n\t\tthis.$$parent(\"dog\");\n\t\tthis.breed = breed;\n\t}\n});\n```\n\n#### Mixins/Multiple Inheritance\n```javascript\n// Implementations will only be attached to the prototype\nvar feline_traits = {\n\tis_asleep : false,\n\tsleep : function() {\n\t\tthis.is_asleep = true;\n\t},\n\twake : function() {\n\t\tthis.is_asleep = false;\n\t}\n};\nvar Cat = Classify(Pet, [ feline_traits ], {\n\tbreed : \"\",\n\tinit : function(breed) {\n\t\tthis.$$parent(\"cat\");\n\t\tthis.breed = breed;\n\t}\n});\n```\n\n#### Static Properties/Methods\n```javascript\n// Static properties can be defined with the \"$$static$$\" prefix\n// or defined in bulk with $$static$$ : {prop1:1, prop2:2}\nvar Bird = Classify(Pet, {\n\tbreed : \"\",\n\tinit : function(breed) {\n\t\tthis.$$parent(\"bird\");\n\t\tthis.breed = Bird.validateBreed(breed);\n\t},\n\t$$static$$BREEDS : {\n\t\tparrot : \"Parrot\",\n\t\tcanary : \"Canary\"\n\t},\n\t$$static$$validateBreed : function(breed) {\n\t\treturn Bird.BREEDS[breed] || \"Unknown\";\n\t}\n});\n```\n\n#### Autobinding\n```javascript\n// Auto bound properties can be defined with the \"$$bind$$\" prefix\n// or defined in bulk with $$bind$$ : {prop1:function(){}, prop2:function(){}}\nvar Pig = Classify(Pet, {\n\tinit : function() {\n\t\tthis.$$parent(\"pig\");\n\t},\n\t$$bind$$speak : function(event) {\n\t\t// this can now be called within the class with this.speak()\n\t\t// special property $$context added for the duration of this\n\t\t// method to pass along the calling context, with \"this\" is\n\t\t// still the instance\n\t\talert(this.$$context.href);\n\t}\n});\nvar p = new Pig();\n// <a href=\"#oink\" id=\"some-link\">Click me!</a>\ndocument.getElementById(\"some-link\").addEventListener(\"click\", p.speak);\n```\n\n#### Calling overridden parent methods\n```javascript\nvar Dog = Classify(Pet, {\n\tbreed : \"\",\n\tinit : function(breed) {\n\t\t// \"this.$$parent\" is the parent of the calling method\n\t\tthis.$$parent(\"dog\");\n\t\tthis.breed = breed;\n\t},\n\teat : function() {\n\t\t// the dog can only eat fish...\n\t\tthis.$$parent(\"fish\");\n\t},\n\teatBiscuit : function() {\n\t\t// using \"this.$$apply\" can call any method in the parent prototype\n\t\t// with an array of arguments similar to \"Function.apply()\"\n\t\t// this will call Pet.prototype.eat with the argument biscuit\n\t\t// shortcut for Pet.prototype.eat.apply(this, [ \"biscuit\" ]);\n\t\tthis.$$apply(\"eat\", [ \"biscuit\" ]);\n\t},\n\teatDogFood : function() {\n\t\t// using \"this.$$call\" can call any method in the parent prototype\n\t\t// with a set of arguments similar to \"Function.call()\"\n\t\t// this will call Pet.prototype.eat with the argument biscuit\n\t\t// shortcut for Pet.prototype.eat.call(this, \"biscuit\");\n\t\tthis.$$call(\"eat\", \"biscuit\");\n\t}\n});\n```\n\n#### Namespaces\n```javascript\n// creating/retrieving a namespace\nvar namespace = Classify(\"Life\");\n// OR\nvar namespace = Classify.Namespace.from(\"Life\", {} /* any object can be a coerced into a namespace */);\n// note that this cannot be accessed with 'Classify(\"Life\");'\n// if global access is needed use 'Classify.Namespace.from(\"Life\", {}, true);'\n```\n\n###### method 1: through the namespace objects\n```javascript\n// creating classes within a namespace\nnamespace.create(\"Reptile\", {\n\tspecies : \"\",\n\tinit : function(species) {\n\t\tthis.species = species;\n\t}\n});\n// retrieving classes within a namespace\nvar Reptile = namespace.get(\"Reptile\");\n\n// extending classes within a namespace\nnamespace.create(\"Tortoise\", \"Reptile\", {\n\tinit : function() {\n\t\tthis.$$parent(\"tortoise\");\n\t}\n});\n// retrieving classes within a namespace\nvar Tortoise = namespace.get(\"Tortoise\");\n\nnamespace.create(\"Tortoise.DesertTortoise\", \"Tortoise\", {\n\tage : null,\n\tinit : function() {\n\t\tthis.$$parent();\n\t\tthis.age = 0;\n\t}\n});\n// retrieving classes within a namespace\nvar DesertTortoise = namespace.get(\"Tortoise.DesertTortoise\");\n\n// instances\nvar pet = new DesertTortoise();\npet instanceof Tortoise;\npet instanceof Reptile;\npet.getNamespace() === namespace;\n\n// removing a class within a namespace\nnamespace.destroy(\"Tortoise.DesertTortoise\");\n\n// checking a class within a namespace\nnamespace.exists(\"Tortoise.DesertTortoise\");\n```\n\n###### method 2: through the Classify function\n```javascript\n// creating classes within a namespace\nClassify(\"Life\", \"Reptile\", {\n\tspecies : \"\",\n\tinit : function(species) {\n\t\tthis.species = species;\n\t}\n});\n// OR using a \"/\" will denote namespace/classname\nClassify(\"Life/Reptile\", {\n\tspecies : \"\",\n\tinit : function(species) {\n\t\tthis.species = species;\n\t}\n});\n// retrieving classes within a namespace\nvar Reptile = Classify(\"Life\", \"Reptile\");\n// OR using a \"/\" will denote namespace/classname\nvar Reptile = Classify(\"Life/Reptile\");\n\n// extending classes within a namespace\n// Classify(\"Life\", \"Tortoise\", \"Reptile\", {\nClassify(\"Life/Tortoise\", \"Reptile\", {\n\tinit : function() {\n\t\tthis.$$parent(\"tortoise\");\n\t}\n});\n// retrieving classes within a namespace\nvar Tortoise = Classify(\"Life/Tortoise\");\n\nClassify(\"Life/Tortoise.DesertTortoise\", \"Tortoise\", {\n\tage : null,\n\tinit : function() {\n\t\tthis.$$parent();\n\t\tthis.age = 0;\n\t}\n});\n// retrieving classes within a namespace\nvar DesertTortoise = Classify(\"Life/Tortoise.DesertTortoise\");\n\n// instances\nvar pet = new DesertTortoise();\npet instanceof Tortoise;\npet instanceof Reptile;\npet.getNamespace() === namespace;\n```\n\n#### Instantiating\n```javascript\nvar Reptile = Classify(\"Life/Reptile\");\n\n// instances\nvar pet = new Reptile(\"tortoise\");\npet instanceof Reptile;\n\n// instances\nvar pet = new Classify(\"Life/Reptile\", [ \"tortoise\" ])\npet instanceof Reptile;\n!(pet instanceof Classify);\n```\n\n#### Utility\n```javascript\n(function(Classify) {\n\t// here you can use the Classify object and remove the global reference to it\n\t// this function is only available on browser environments\n})(Classify.noConflict());\n```\n\nEnvironments\n--------------------------------------\n\nClassify is [CommonJS](http://commonjs.org) compliant and can be used in the browser scope or the server scope.\n\n### In the browser:\n```html\n<script src=\"path/to/classify.js\" type=\"text/javascript\"></script>\n<!-- Classify() is now in the global context -->\n```\n\n### In [NodeJs](http://nodejs.org/) environment:\n```bash\nnpm install classifyjs\n```\n\n```javascript\nvar Classify = require(\"classifyjs\").Classify;\n```\n\n### With an AMD loader like [RequireJS](http://requirejs.org/):\n```javascript\nrequire({\n\t\"paths\" : {\n\t\t\"classify\" : \"path/to/classify\"\n\t}\n}, [ \"classify\" ], function(Classify) {\n\tconsole.log(Classify.version);\n});\n```\n\nBuilding the Source\n--------------------------------------\n\nClassify uses the [grunt](https://github.com/cowboy/grunt) build system. Building Classify requires node.js and a command line gzip program.\n\n```bash\n# Install grunt.\n$ npm install -g grunt-cli bower\n\n# Clone the Classify git repo.\n$ git clone git://github.com/weikinhuang/Classify.git\n$ cd Classify\n\n# Install node modules.\n$ npm install\n$ bower install\n\n# Run grunt.\n$ grunt\n```\n\nRunning the tests:\n\n```bash\n$ grunt test\n```\n\nFor saucelabs users, test can be run from the test task with:\n\n```bash\n$ export SAUCE_USERNAME=[saucelabs username]\n$ export SAUCE_ACCESS_KEY=[saucelabs access token]\n```\n\nTo skip the saucelabs tests\n\n```bash\n$ grunt test:local\n```\n\nThere are many other tasks that can be run through grunt. For a list of all tasks:\n\n```bash\n$ grunt --help\n```\n\n\nChangelog\n--------------------------------------\n#### v0.14.1\n\tAdding `priority` property to mutators to allow for mutator processing order\n\n#### v0.14.0\n\tAbility to set internal references for namespaces created with `Namespace.from()`\n\n#### v0.13.1\n\tBREAKING CHANGE: Renaming more additional internal props for consistiency\n```javascript\n\tNamespace.nsname => Namespace.$$nsname\n\tNamespace.nsref => Namespace.$$nsref\n```\n\n#### v0.13.0\n\tBREAKING CHANGE: the mutator prefix is now $$\\w+$$\n\tBREAKING CHANGE: underscores are no longer allowed in mutator names\n\tBREAKING CHANGE: multiple mutators can be specified in the mutator prefix separated by an _\n\tBREAKING CHANGE: the mutator prefix is always removed regardless if there is a mutator attached or not\n\tgreedy mutators can be added to always be run onPropAdd and onPropRemove\n```javascript\n\t// prefix change\n\t{ __mutator_prop : 1 } => { $$mutator$$ : 1 }\n\t// multiple mutators\n\t{ $$mutate1_mutate2$$ : 1 }\n\t// greedy mutators\n\taddMutator({ greedy : true })\n\t// prefix removed when attached to an object\n\t$$abc$$prop : 1 => prop : 1\n```\n\n#### v0.12.0\n\tBREAKING CHANGE: Class.toString now returns the init method body\n\tBREAKING CHANGE: Renaming internal properties and certain magic properties.\n\tBREAKING CHANGE: Change behavior of the bind mutator to make context a property instead of a argument.\n```javascript\n\t// calling parent method\n\tthis.parent => this.$$parent\n\tthis.invoke => this.$$apply\n\tadding this.$$call\n\t// internal variables\n\tClass.superclass => Class.$$superclass\n\tClass.subclass => Class.$$subclass\n\tClass.implement => Class.$$implement\n\tClass.mutators => Class.$$mutator\n\tClass.applicate => Class.$$apply\n\tClass.__isclass_ => Class.$$isclass\n\t// bind mutator\n\tfunction(context) {} => function() { this.$$context; }\n\t// shortcuts\n\tremoved this.self, use Class.prototype.constructor/this.constructor instead\n```\n\n#### v0.11.0\n\tRemoving Observer and observable mutator from core. Now in Classify-Observable[https://github.com/weikinhuang/Classify-Observer]\n\n#### v0.10.4\n\tPass arguments to onInit mutators\n\n#### v0.10.3\n\tAllow for mutators to be defined on a per class/namespace level\n\tAbility to create mutators out of any object\n\tConvert to grunt build system\n\n#### v0.10.2\n\tFix requirejs and amd definitions, remove async autoloader to support it\n\n#### v0.10.1\n\tAndroid Mobile thinks typeof RegExp == \"function\"\n\n#### v0.10.0\n\tAllow init mutators to override constructor return value & throw on scalar values\n\tAdding null value to the prototype for observable properties\n\tObserver properties don't need to go through objectDefineProperty\n\n#### v0.9.10\n\tBREAKING CHANGE, implements overrides extends when defining a class that institutes both\n\tUse ES5 Object.create when possible\n\n#### v0.9.9\n\tFix issue when extending non Classify objects overriding special properties\n\tGlobal namespace is now a property of Classify on Classify.global\n\tUpdated Observers to have a 'on' alias and be able to bind events to be fired only once\n\tUsing Object.prototype.hasOwnProperty instead of .hasOwnProperty\n\n#### v0.9.8\n\tThe called context is passed in as argument 1 for auto bound functions\n\n#### v0.9.7\n\tRefactoring internals so that adding and removing mutators can be externalized\n\tAdded mutator to auto bind functions to a class instance\n\n#### v0.9.6\n\tFix case where classes are added as properties of other classes\n\n#### v0.9.5\n\tAdded ability to add non wrapped methods to the class prototype\n\n#### v0.9.4\n\tAdding Travis-ci config file\n\tFix issue with IE6-9 when extending from non Classify classes\n\tGeneral bug fixes, removing support for IE<6\n\n#### v0.9.3\n\tRenaming Class.Extend to Class.extend\n\n#### v0.9.2\n\tAbility to delay event listeners from being triggered in observers\n\n#### v0.9.0\n\tAbility to add statics and observers in a container\n\n#### v0.8.5\n\tFix issue with adding overriding functions to a parent prototype\n\n#### v0.8.0\n\tOnly fire observer listeners when the value has changed\n\n#### v0.7.5\n\tfixing parent invocation using applicate in default invoke method\n\n#### v0.7.0\n\tAbility to inherit from objects that are not created with Classify.create.\n\tAllow Classify to be AMD compatible.\n\textend utility function that \"extends\" objects with properties from other objects in a shallow manner\n\tfix issue with class invocation of \"invoke\" when class is a direct property of a namespace\n\t\"get\" in namespace cascades into \"GLOBAL\" namespace classes\n\tgroundwork for ability to extend native and non create objects\n\tRemoving check for native objects (IE doesn't allow extending native objects).\n\tthrow Error objects instead of strings\n\n#### v0.6.0\n\tbetter detection of parameters for using Classify function (\"namespace/classname\" for retrieval)\n\tminification optimizations\n\tquicker access to the GLOBAL namespace\n\n#### v0.4.0\n\tability to inherit the parent invoke method if not defined\n\texporting provide to the Classify object\n\tGLOBAL namespace that all namespaced classes can inherit from\n\n#### v0.3.5\n\tability to get a class definition synchronously and asynchronously in Classify\n\tability to test if a namespace exists\n\tadding Classify.noConflict for conflict free usage of Classify\n\n#### v0.3.0\n\tusing more standardized nomenclature\n\t\"_construct_\" => \"init\"\n\t\"_invoke_\" => \"invoke\"\n\t\"_apply_\" => \"applicate\"\n\t\"_parent_\" => \"parent\"\n\t\"_self_\" => \"self\"\n\n#### v0.2.0\n\tability to create and destory classes created within namespaces\n\tbetter checking of enumerable keys in IE < 9\n\tbugfix on Extend functionality\n\tClassify function endpoint has ability to to get namespace and create classes within the namespace\n\tfixing issue with adding multiple properties to a class with the addProperty call\n\t\"get\" in namespace takes in a callback and passes in the class\n\tglobal references\n\tnamespacing functionality\n\tonly export classify to root object if it's a browser\n\tpulled out the body of invoke to apply and default invoke will call apply\n\tthe exported object is created using the internal Create method\n\tupdated to \"use strict\";\n\nAbout\n--------------------------------------\n\nClassify copyright 2011-2013 by [Wei Kin Huang](http://closedinterval.com/).\n\nBuild Tools: \n[Grunt](https://github.com/cowboy/grunt),\n[QUnit](https://github.com/jquery/qunit),\n[Benchmark.js](https://github.com/bestiejs/benchmark.js),\n[UglifyJS](https://github.com/mishoo/UglifyJS),\n[JsHint](https://github.com/jshint/jshint),\n[JsCoverage](http://siliconforks.com/jscoverage).\n\nAll code released under the [MIT License](http://mit-license.org/).\n\nFork me to show support and help fix bugs!\n","maintainers":[{"name":"weikinhuang","email":"weikin.huang04@gmail.com"}],"time":{"modified":"2022-06-13T06:06:07.089Z","created":"2012-04-19T21:23:46.794Z","0.7.5":"2012-04-19T21:23:47.566Z","0.8.5":"2012-04-27T02:52:16.431Z","0.9.5":"2012-05-09T18:01:10.612Z","0.9.7":"2012-05-20T17:00:36.350Z","0.9.8":"2012-06-07T18:36:24.514Z","0.9.9":"2012-06-19T18:59:44.737Z","0.10.3":"2013-05-07T00:24:10.508Z","0.11.0":"2013-09-19T16:04:12.904Z","0.13.1":"2013-10-28T19:59:46.346Z","0.14.0":"2014-02-03T23:11:24.962Z","0.14.1":"2014-09-11T15:17:43.776Z"},"author":{"name":"Wei Kin Huang","email":"wei@closedinterval.com"},"repository":{"type":"git","url":"https://github.com/weikinhuang/Classify.git"},"readmeFilename":"README.md","homepage":"http://classifyjs.com","keywords":["util","functional","server","client","browser","prototype","object-oriented","class","classes","inheritance","abstraction"],"bugs":{"url":"https://github.com/weikinhuang/Classify/issues"}}