{"_id":"pd","_rev":"60-8dea01827524a41dda98b9caa7a893c2","name":"pd","description":"an ES5 / OO utility","dist-tags":{"latest":"0.8.1"},"versions":{"0.0.1":{"name":"pd","version":"0.0.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"dependencies":{},"main":"src/pd","engines":{"node":"0.4.x"},"devDependencies":{"contract":"0.1.2","vows-is":"0.1.31","docco":"0.3.0"},"_npmJsonOpts":{"file":"/home/raynos/.npm/pd/0.0.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"pd@0.0.1","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"0919db91d47d4d555d82f4cfc263065d7c5e27b2","tarball":"https://registry.npmjs.org/pd/-/pd-0.0.1.tgz","integrity":"sha512-T43I6J2k1y3Zvdb++apY7tJIMqAb7HmjFgWO9zdB2EByrvvm1BJqaGLwqxNnk3sVYFGCy8j0eiqmNnRgEYeSxw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/Xp/Qe1UIwa/OylcrzNsZmMP5RcXTwzyzR/aN0nkqIwIgRr3Qcn60RrVqVXaFyVggH18x1UiSxNk+tIr0rAxMopk="}]},"scripts":{},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.1.0":{"name":"pd","version":"0.1.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"dependencies":{},"main":"src/pd","engines":{"node":"0.4.x"},"devDependencies":{"contract":"0.1.2","vows-is":"0.1.31","docco":"0.3.0"},"_npmJsonOpts":{"file":"/home/raynos/.npm/pd/0.1.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"pd@0.1.0","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"cecced2b65860cdebcca38cbd9ce9544c06fa300","tarball":"https://registry.npmjs.org/pd/-/pd-0.1.0.tgz","integrity":"sha512-SCZcG975V3F3uFHwJ3Zhbeg26jVv0brNPUNdPb/CMRU/TyVGMWJu8w04WZe3uYz49UGy8ZmDrDfFfKGNT5LOvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzXVHVCmFKb2OVImu7MrHx4BX9H4LV1zwgUiXuf+HayAIgWqifUsPtJXS2v2NozCV/KvWTrUrZ1L1iy+N8KUlOCqU="}]},"scripts":{},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.1.1":{"name":"pd","version":"0.1.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"dependencies":{},"main":"src/pd","engines":{"node":"0.4.x"},"devDependencies":{"contract":"0.1.2","vows-is":"0.1.31","docco":"0.3.0"},"_npmJsonOpts":{"file":"/home/raynos/.npm/pd/0.1.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"pd@0.1.1","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"95bf96bc5c50f06050e2785ebd38108a0c0d39e9","tarball":"https://registry.npmjs.org/pd/-/pd-0.1.1.tgz","integrity":"sha512-Sl7Jc7cKhCg6CLaCRcnT5UsNEci8aId5CgaiVotvjXtdfAgcZf8INqywAgQRrvNAf+SHrulOYd0X4Y+/JnUbOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKMrSiThNMivUEAQK93nDLHMz+fxkWuY19KF4gEYzL7AiEA87AJwKaose/DCuP+TbxRhi5Irh2VDBgpz/RsEG5lIz4="}]},"scripts":{},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.2.1":{"name":"pd","version":"0.2.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.5.x"},"devDependencies":{"tester":"0.0.2"},"_npmJsonOpts":{"file":"/home/raynos/.npm/pd/0.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"pd@0.2.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.5.9","_defaultsLoaded":true,"dist":{"shasum":"068e40253cca22cbaf328082104910dad5d140df","tarball":"https://registry.npmjs.org/pd/-/pd-0.2.1.tgz","integrity":"sha512-qGM1wSydnTaJhTXSsfM/OhZFngoFlA8V3SOe/I1iYESDQG7CQvtiKr6Yy2XIBSP5o/yZKdwhr0H5R90zTdtEJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAPqnKTKcEICP4fu3Idss0EoWpvR6CxO630joxGkXMzmAiEAmMMZ8rThWtTk6EuzCEeKQDgEkBnbsfT6ABUE6T63pnY="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.0":{"name":"pd","version":"0.3.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.0","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"ae1929d68f84665ce6feb65e32257a3344811191","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.0.tgz","integrity":"sha512-n6ymgGzYyggUIKtU+oJb4oEbJg7u+Nxzgv0qh3g9TB1qLoDDcNrNrr1vlICy7y1VLFCsWISgUGvC6N3l+B039g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1+6jpR1L5sDiJxWYuf2bTJqcRL764ZKfyZpFE7CCzeAiB89KjF4brnKmGzBdpdT1TwW4vvhqwBGd/CG27ah1Tydw=="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.1":{"name":"pd","version":"0.3.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"4f7c998e3a7b9fdaf66f917789a01e397f271a1a","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.1.tgz","integrity":"sha512-p52wZ5cjiEyHkjA/b5ZU6urAUyIbMqUJegkpmvuJJMIZvR1UY5XHnZxXWwY4IMVtH9uoRLRARtjWADIgkuuC/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAxQrwQgzQIxE4TNm5NrAI1MQVvR1XKeVHdNwJ0PPh07AiAc+RvGmHS7Mn4hQAAjwwLMrkUD1VPWOwLaYCL6MjW9RQ=="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.3":{"name":"pd","version":"0.3.3","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.3","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"3dba08014e4244be7e73e0aead022606fa62f03b","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.3.tgz","integrity":"sha512-Ob5l0fVHlSo1sMewFGlAni8T86wbTeyHTjFFiueHtnW/KYGOGLlzti+Ui0nfTkjI1XpEn6RqglMib7Gk2URCdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8M0UuHNBMZY1LXNS6fWVKlP5wMH4Zis1anmz6VHguNAiAvsUmDebZ9/D/DP632F4kEAXueWLgb3nUC+Xefd7BuLg=="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.4":{"name":"pd","version":"0.3.4","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.4","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.105","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"3ddbe9cb862f6405998f7080d269780c35a75a2d","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.4.tgz","integrity":"sha512-ciAw3iw/gPW9/8wZ1dk+GyG+x0cka2MAK9OQaJdozuI1wGgnaSszyKMs/vs12QeKt3v219Unx5UurPe08Tix6A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDi64PzEkQJ9qvzLTykAysWAvftVpJUCXtpkwjTzEkeHQIhAKHWxmglf0fFhrR+uJdJlfybYJL0ys2cfM785isy46Ni"}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.5":{"name":"pd","version":"0.3.5","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.5","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.3","_defaultsLoaded":true,"dist":{"shasum":"110752519d30b5dcde9d4ac9178afa50f214a76d","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.5.tgz","integrity":"sha512-Ku38h2BFbyBvE7PQMxk9C3V/W/juQj6NeG05wr69QqED8pjleU5L2HHAbPFXFI/U1bNv0BBxmnzol9hJYWsBWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICUlsq4fsXSMfpqjk1xJ13/08oS0LKbi+7zAbzP5LqGtAiBzlEbHqxD6eqgvw5+uN/S6WZGV+Jex+8pVSuLxsXyBzw=="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.6":{"name":"pd","version":"0.3.6","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.6","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-alpha-6","_nodeVersion":"v0.6.4","_defaultsLoaded":true,"dist":{"shasum":"6724dd51d8cd8bacfdcc9074e86bb851243fbfd1","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.6.tgz","integrity":"sha512-7C/b2axKk04DAm0H/C97h18DomFU8gIatnvM5hgDOIfKEVVOYehKc4dlqvxD2g7F2h270esSC8gqnZVuQmADZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6PGgSz6Idp7L4WmVSRSgADXrTonXs/duKxR49vqPy9wIhANCEdG3gys/oPobmWkJ34UoTy3Pj9k0+HMnL2WS36tQg"}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.7":{"name":"pd","version":"0.3.7","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"scripts":{"test":"node test/pd-test.js"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.7","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-alpha-6","_nodeVersion":"v0.6.4","_defaultsLoaded":true,"dist":{"shasum":"63b012c70b112bbc1609380e0788b9d81cc9a147","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.7.tgz","integrity":"sha512-T5iAKyyEPrEuRMHntFeKUWXU3UL4ahsZpij73qGiBmmGq/Ncki30ce+zfmV7hEEQKdquVlDSk3lTipW4k3anlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBuW8KtezVKJpmPIutotPRiS8ARi3EkKrb72JnhB4HLhAiEA56D+h/pvFo2+6XL+vcO2FGFPABmW5rSHRdLJBktV9cY="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.8":{"name":"pd","version":"0.3.8","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"scripts":{"test":"node test/pd-test.js"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.8","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-alpha-6","_nodeVersion":"v0.6.4","_defaultsLoaded":true,"dist":{"shasum":"d9ae780528dd6ebb122d25577dd8530386c6ac75","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.8.tgz","integrity":"sha512-O4Kwv2v8lU7EyUhSPazTllW3Lq/L/v9ekb6Uf9upoViz1ob+zJf2AVhEBF4HVs0AISEQel+OTGbYsNh2Zevoag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDz8epYHWdR33fAYuMJcl5tkk8V38Qbj/9LhPpZUpqMogIhAP6Ui1DfHT3DoIbykegUUUk18d+WKXN/MZZ/oinNxYmH"}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.3.9":{"name":"pd","version":"0.3.9","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"scripts":{"test":"node test/pd-test.js"},"devDependencies":{"tester":"0.0.4"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.3.9","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-alpha-6","_nodeVersion":"v0.6.4","_defaultsLoaded":true,"dist":{"shasum":"fe2d9fcfc031eb70bb4db5cabb1be043be633854","tarball":"https://registry.npmjs.org/pd/-/pd-0.3.9.tgz","integrity":"sha512-LAnReyx16Rtc0ukzYPUR0l/J4wVf2d7EPeD7kTzISNGmV8HBjjLjs/HwpRelFVdumPif6TCJ5F4R1VPdoScUuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6SibcpEAy7o1/7rYlK4PmF6xI+DHPsh320k0ewc485gIgZ1sM5RuAdG+ig8Urhu1fOg7Kif7C5p566VbdKpqP17k="}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.4.0":{"name":"pd","version":"0.4.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"src/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.4.0","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-7","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"8961562929485057ef40625018ff01e6ca08e7e7","tarball":"https://registry.npmjs.org/pd/-/pd-0.4.0.tgz","integrity":"sha512-5Rm7J6WggyroO8lX/k7sU0F+f+tInKkf/zPElfy9atEOV3+UQg4REQFtqE2UDK0MIuF9g7yCwszoqzMr9Z+0Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDGB8rDN1J8YAJ/rJPuf9nm9ZTxMjWkpwDj8K25uAxi5AiAexe8k+RDKiXL8b4X+rTYtQD1eDUzU6XW6sZdP8it7VQ=="}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = pd.Base.make({\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    });\r\n\r\n    var Cat = Animal.make({\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; }\r\n    });\r\n\r\n    var cat = Cat.beget();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into propertydescriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n## Installation\r\n\r\nnpm install pd\r\n\r\n## Test\r\n\r\nnode tests/pd-test.js\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.4.1":{"name":"pd","version":"0.4.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.4.1","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-7","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"f8c15349f4c917c9a5e987ff478dfb75d448e3c2","tarball":"https://registry.npmjs.org/pd/-/pd-0.4.1.tgz","integrity":"sha512-pyT7Yd+81QN+YN8V6jPCB+/i5QdLg2pmshv6Ccg0ttIm+XxvA4o0IObYTyWdEk2vrW8X9O73LW1orqNImCflgQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCC7wXSvt58Dru64403a6Ttize85WEQOqpJ25WNT+CeRAIgfYHFY3FRRXmwErkesi9okOTA2QvPZlfpB4NCDAIxR+k="}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`node tests/pd-test.js`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.4.2":{"name":"pd","version":"0.4.2","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.4.2","dependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-beta-7","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"97719903760ac898db688ae2805d43b55cffdf2f","tarball":"https://registry.npmjs.org/pd/-/pd-0.4.2.tgz","integrity":"sha512-xah0FDvIHtVnw3hPFYKnRDHoq2Ggd6AgCekYQtDG/M8GKhDWwUPgYJnIJae6SAxQisyePEg57mRfT+z5vKFgYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEd6aD3kRT9iWUAXrYYXndvT6BUD6udRQTo3r87GpAg7AiEA/7LmVa/hLttxTypVckNidQvxpAJl6cGJDJobjSSWj4E="}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.5.0":{"name":"pd","version":"0.5.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.5.0","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"a6cea23e5c6e1ee133327a2e1c7fe7c9b6c20366","tarball":"https://registry.npmjs.org/pd/-/pd-0.5.0.tgz","integrity":"sha512-l7vQ6Rb/fgQfuUTnvY+eaUL4MCgsFAlGjyjRsxl1V9l6SpBzpsClXsezRS7Jr0jcfW1foijPy4p1PQTxfLvnJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDMdxqUPY5cXNTD2nKh1HNfer4m5Nqu2DbSuaJR5A1gKAiEA9I1F+XMjTmVTaRQLfnWqjGbXFgK4fX3uP36QbmhK4DY="}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.6.0":{"name":"pd","version":"0.6.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.6.0","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"0858b135ef77b8f99c9ff6e4ece123dacaad8b9a","tarball":"https://registry.npmjs.org/pd/-/pd-0.6.0.tgz","integrity":"sha512-XtcktbMpgs/w4OVJFQn885OhrmVGlsGmmtNRw9pqI43nwKwmdJwPJ3vBt3v3HQj7EahGHjSee5b+UCrUFVHjbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGqtdY1Chf9wrn6mjnhbjkYQCe5iYEQoGd0GXx5vqSdAIhAMFyTepU+oHykm9XSs077ofEzH7yyMxHV0W/04qsnBPT"}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### pd.mixin <a name=\"mixin\" href=\"#mixin\"><small><sup>link</sup></small></a>\r\n\r\n### pd.combine <a name=\"combine\" href=\"#combine\"><small><sup>link</sup></small></a>\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.6.1":{"name":"pd","version":"0.6.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.6.1","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"7b3dc89f57eb308fdb62b47363542fd640e80833","tarball":"https://registry.npmjs.org/pd/-/pd-0.6.1.tgz","integrity":"sha512-1sxIQCI4kBl9t4fexp7Hv5LP0edGt/mMO0cPIvaULo2WPJwoVhXazwLUiRydyXg43J9qd+cl9gmg/8CWe8gWYQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDasN26V2+R2M4Oh6VMc9evdVo2dInkBIcz4knByjYsaAIhAIs+ADzk2u1eNEBZmZs9X34yaEO0E0nRT4dXtiPkUPX9"}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### pd (obj) <a name=\"pd\" href=\"#pd\"><small><sup>link</sup></small></a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### pd.extend (obj..) <a name=\"pd.extend\" href=\"#pd.extend\"><small><sup>link</sup></small></a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### pd.bindAll (obj, optionalWhitelist) <a name=\"pd.bindAll\" href=\"#pd.bindAll\"><small><sup>link</sup></small></a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional whitelist parameter to only bind some methods\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, [\"draw\"]);\r\n        }\r\n        draw: function () { \r\n            /* use `this` with its \"correct\" value, i.e. `o` */\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### pd.Name <a name=\"pd.Name\" href=\"#pdName\"><small><sup>link</sup</small></a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### pd.mixin <a name=\"mixin\" href=\"#mixin\"><small><sup>link</sup></small></a>\r\n\r\n### pd.combine <a name=\"combine\" href=\"#combine\"><small><sup>link</sup></small></a>\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.6.2":{"name":"pd","version":"0.6.2","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":"0.6.x"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.6.2","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"03e52ecaea65a745fca728839eb2475442261205","tarball":"https://registry.npmjs.org/pd/-/pd-0.6.2.tgz","integrity":"sha512-h3buIhXm69Jmp0iTyyBeG/ImWNcDdaTfmkH1WQtHJtqyq6ZbRIqDhPvSt/6bcIQ4CiKAkLBfANbm7yLpbxV6ag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC37Ged8dkCNjq+03BWET+Mmty3cMFE0mXzTCwkVfzdFAIhALKXbXo9wYU3t+i0Zorvvv1DAz471JTCh3vO+mS4gX3/"}]},"readme":"# pd [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## Example \r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    };\r\n\r\n    var Cat = pd.extend(Object.create(Animal), {\r\n        nyan: function () { ... },\r\n        constructor: function () { this.lives = 9; return this; }\r\n    });\r\n\r\n    var cat = Object.create(Cat).constructor();\r\n\r\n## Motivation\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## Blog Posts\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## Documentation\r\n\r\n### <a name=\"pd\" href=\"#pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor() { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pdName\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\nExample:\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.6.3":{"name":"pd","version":"0.6.3","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.6.3","dependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"88e47a37a237622de75aa06e1829307e8fed2ac2","tarball":"https://registry.npmjs.org/pd/-/pd-0.6.3.tgz","integrity":"sha512-SF4zyQo3jT4KYvi2xvReUgsqVIorR0rImxcMbPbOdzsRO81xmVH1DU+mPcoWQrxPrUh5g5KrObzu9/uMOGoToQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDk2u2hBnqLjIfuKr7UxCuSlRhlsN+glewVCEr4HSYLFgIhAKIserlOyO7XMMFigGxgJEu2970YieRCWSAlLtQBR9cm"}]},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.7.0":{"name":"pd","version":"0.7.0","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.7.0","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"74d997dbff3f23339960a00cf2c08c14eefc9b06","tarball":"https://registry.npmjs.org/pd/-/pd-0.7.0.tgz","integrity":"sha512-cWvyn8/Z4JzQ8fO9QHCHcEJVP9agc1/MoF1YqKAUB7BAstJ6mRvQTflj4kWTTHwd81rh2ga2WZ0nueXeK9a1Hw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9jrfyNqtc3JmbxKNhAEtkDeAIXb9xV4bQWiVgA6zCUAiEA3ezdvsiKfeElgPsaheS078fXL4GHKAQXcKrdH1WDp34="}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        constructor: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).constructor()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.pd\" href=\"#pd.pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.7.1":{"name":"pd","version":"0.7.1","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.7.1","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"8fa4ed3d8c2a482bb648f2dd2af268c17d93413e","tarball":"https://registry.npmjs.org/pd/-/pd-0.7.1.tgz","integrity":"sha512-0wUwHxVrrf0mUAB3twVR1nCKTiU3QUnrmVh09mG9m4a4riKjlXpu/fofoGS5BmD8y0IwFeezb9tIpOt9QTd7KQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkXa75nTiMn6gX5s+5w0xf9mQQUCAh0j4UfNoN9FnldQIgCPpnBfCqgCzU73Ac/1neEJEKfg8HAEtn7brN1o00cAc="}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        constructor: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).constructor()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.pd\" href=\"#pd.pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.7.2":{"name":"pd","version":"0.7.2","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.7.2","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"fdde8741a319391731b9f137c2f1a108e441ee19","tarball":"https://registry.npmjs.org/pd/-/pd-0.7.2.tgz","integrity":"sha512-xpugtEH0EvQcFEt2vhmazV7vpajAnjsyUxutSAe3fmXIWLRlNZxtOAWlY87Uyzb+3i5EdIYc2v2hqtwDt4lzFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGHKarwH0ktrkkQdgr5ghEdaMbc33enRiqjFzML0jyFxAiBE/VSw1k1evT3rie2RiYpk2xmKSSexGUu/G6EBHXbNXw=="}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        constructor: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).constructor()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.pd\" href=\"#pd.pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.7.3":{"name":"pd","version":"0.7.3","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.7.3","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"ff257b33d1ca273c92c83435dbac3e70c0c6f966","tarball":"https://registry.npmjs.org/pd/-/pd-0.7.3.tgz","integrity":"sha512-a83OYlW2tePThQCm6FdmQ04Z40q9XpVXgL+jIcLKZLIdAZ37yw1WS3ri96d9eV2nftPOX4tl1+LI0ggjK1ukSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmT0h3UgWj3Tf7Q+2+HaSwaQNK+6FnHUl43ySYsO3b9gIhAIeAIwWlIIa45XeCTKOui3SIUpqszrQs0fdZnHNLuGyl"}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        constructor: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).constructor()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.pd\" href=\"#pd.pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.7.4":{"name":"pd","version":"0.7.4","description":"Manage propertyDescriptors, an OO utility","keywords":["oo","oop","propertydescriptor","arch","utility"],"author":{"name":"Jake Verbaten","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","engines":{"node":">=0.4"},"scripts":{"test":"make test"},"devDependencies":{"mocha":"0.8.1"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.7.4","dependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"322c9d5e2777924dffab03f3d7ff95ab320d9f05","tarball":"https://registry.npmjs.org/pd/-/pd-0.7.4.tgz","integrity":"sha512-hSl4Ur9LV7Ru5tEYcjnY33TDPKFyd1/M8VYf1eHR8Vsw4eaDFHsIPFv8zMPaMzlLKh5JEdQJogvbLAjdeNUY6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAJJl0+Yy5klo3Ynu4Y6aAuC+1G8G/CQFhy7Y66G0uQWAiBVALN4yJL9SnN/UvD8wf4h2Ffok7IFXJUf5CliRYUrog=="}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        constructor: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).constructor()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.pd\" href=\"#pd.pd\">pd (obj)</a>\r\n\r\npd converts all the values of your objects properties into property descriptors of those values.\r\n\r\n    pd({\r\n        \"foo\": \"bar\"\r\n    })\r\n\r\nis the same as\r\n\r\n    {\r\n        \"foo\": {\r\n            \"value\": \"bar\",\r\n            \"enumerable\": true,\r\n            \"writable\": true,\r\n            \"configurable\": true\r\n        }\r\n    }\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.8.0":{"name":"pd","version":"0.8.0","description":"an ES5 / OO utility","keywords":["oo","oop","arch","utility","util"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"index","scripts":{"test":"make test"},"homepage":"https://github.com/Raynos/pd","contributors":[{"name":"Jake Verbaten"}],"bugs":{"email":"raynos2@gmail.com","url":"https://github.com/Raynos/pd/issues"},"licenses":[{"type":"MIT","url":"http://github.com/raynos/pd/raw/master/LICENSE"}],"engines":{"node":">=0.4"},"dependencies":{},"devDependencies":{"mocha":"1.0.3"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.8.0","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"46c6a837ca513bd3100ec4cb55e8d3125b346087","tarball":"https://registry.npmjs.org/pd/-/pd-0.8.0.tgz","integrity":"sha512-2TbpjFf1TGLd4W9osHs9qHK19KTNbfmeIoK1tfdeEoBBnJOMtzVj9/KiajNE3RKYAl1/g0UJus4jYYYyRR1PRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHYalWdFzydcskKw/aZstr5NvxdyPdxgpZ7sQAESPRbYAiEAv1/gCnV68iOsKtXrtqTZzm+/Tjo7hCYj2Vxc9zNq4TI="}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        initialize: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).initialize()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}},"0.8.1":{"name":"pd","version":"0.8.1","description":"an ES5 / OO utility","keywords":["oo","oop","arch","utility","util"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"},"main":"lib/pd","scripts":{"test":"make test"},"homepage":"https://github.com/Raynos/pd","contributors":[{"name":"Jake Verbaten"}],"bugs":{"email":"raynos2@gmail.com","url":"https://github.com/Raynos/pd/issues"},"licenses":[{"type":"MIT","url":"http://github.com/raynos/pd/raw/master/LICENSE"}],"engines":{"node":">=0.4"},"dependencies":{},"devDependencies":{"mocha":"1.0.3"},"_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"_id":"pd@0.8.1","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"0267a6657cd74ce3cdb22b6090211550b02e7495","tarball":"https://registry.npmjs.org/pd/-/pd-0.8.1.tgz","integrity":"sha512-mgpLfCM1w0oTn6A+sL9pVKh0ihP9OnqtciiQ+BsZYY9FTOVQLvK06q3g+hgCMLR+lRW8VPt3WpTgq7Q3xNpeDg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdyoi25vE+tQna8HnP8kuTVCnbuIYs1uiyhtfTaZIzfAIhAPUTRvxdYlhHc0gsO9ZzC6WVCh6EdhN1JUpLav1/9ebr"}]},"readme":"# <a href=\"#pd\" name=\"pd\">pd</a> [![Build Status][1]][2]\r\n\r\nHelping you do prototypical OO\r\n\r\n## Status: production ready\r\n\r\n## <a href=\"#Example\" name=\"Example\">Example</a>\r\n\r\n    var extend = require(\"pd\").extend\r\n\r\n    var Animal = {\r\n        legs: 4,\r\n        walk: function () { ... }\r\n    }\r\n\r\n    var Cat = extend({}, Animal, {\r\n        nyan: function () { ... },\r\n        initialize: function () { \r\n            this.lives = 9\r\n            return this;\r\n        }\r\n    });\r\n\r\n    var cat = extend({}, Cat).initialize()\r\n\r\n## <a href=\"#mov\" nane=\"mov\">Motivation</a>\r\n\r\nES5 OO is [verbose][8]\r\n\r\npd solves this with utilities and sugar.\r\n\r\n## <a name=\"blogs\" href=\"#blogs\">Blog Posts</a>\r\n\r\n - [Improving ES5 OO][9]\r\n - [Doing OO JS part 3][6]\r\n - [Doing OO JS part 2][5]\r\n - [Doing Object Oriented JavaScript][3]\r\n\r\n## <a name=\"Documentation\" href=\"#Documentation\">Documentation</a>\r\n\r\n### <a name=\"pd.extend\" href=\"#pd.extend\">pd.extend (obj..)</a>\r\n\r\npd.extend extends an object with other objects. key clashes are given right preference\r\n\r\n    pd.extend(\r\n        {\r\n            \"one\": \"faz\",\r\n            \"three\": \"bar\"\r\n        },\r\n        {\r\n            \"two\": \"ni\",\r\n            \"three\": \"baz\"\r\n        },\r\n        {\r\n            \"three\": \"bas\",\r\n            \"four\": \"four\"\r\n        }\r\n    );\r\n\r\nis the same as\r\n\r\n    {\r\n        \"one\": \"faz\",\r\n        \"two\": \"ni\",\r\n        \"three\": \"bas\",\r\n        \"four\": \"four\"\r\n    }\r\n    \r\npd.extend returns the first object you pass in.\r\n\r\n### <a name=\"pd.bindAll\" href=\"#pd.bindAll\">pd.bindAll (obj..)</a>\r\n\r\npd.bindAll is similar to underscore's bindAll method. It takes an object and binds all it's methods to the object. It takes an optional list of objects to mix in\r\n\r\n    var o = {\r\n        constructor: function () { \r\n            pd.bindAll(this, {\r\n                draw: function () { \r\n                    /* use `this` with its \"correct\" value, i.e. `o` */\r\n                }\r\n            });\r\n        },\r\n        start: function (eventEmitter) {\r\n            // note `this.draw` would not work correctly if it wasn't bound\r\n            eventEmitter.on(\"draw\", this.draw);\r\n        }\r\n    };\r\n\r\n### <a name=\"pd.Name\" href=\"#pd.Name\">pd.Name</a>\r\n\r\npd.Name constructs a Name function. This name function when passed your object will\r\nreturn a privates object. This privates object cannot be accessed in any other \r\nway then calling Name.\r\n\r\n    var Klass = (function () {\r\n        var privates = pd.Name();\r\n\r\n        return {\r\n            constructor: function (secret) {\r\n                privates(this).secret = secret;\r\n            },\r\n            getSecret: function () {\r\n                return privates(this).secret;\r\n            }\r\n        };\r\n    }());\r\n\r\n### <a name=\"pd.memoize\" href=\"#pd.memoize\">pd.memoize(fn[, context[, hasher]]</a>\r\n\r\npd.memoize caches the results of an asynchronous function. Pass in an optional\r\ncontext so the fn is called with the context and pass in an optional hasher so\r\nyou can choose how your the arguments of the returned memoized function should\r\nmap to results\r\n\r\n    var f = pd.memoize(asyncFunction),\r\n        start = Date.now()\r\n\r\n    f(10)\r\n    f(10)\r\n    f(10)\r\n\r\n    var time_taken = Date.now() - start // roughly 500\r\n    // because asyncFunction is memoized, the second and third call return\r\n    // at the same time as the first, and any call after that returns\r\n    // immediately\r\n\r\n    function asyncFunction(key, callback) {\r\n        setTimeout(function () {\r\n            callback(key * 2)\r\n        }, 500)\r\n    }\r\n\r\n## Installation\r\n\r\n`npm install pd`\r\n\r\n## Test\r\n\r\n`make test`\r\n\r\n## Contributors\r\n\r\n - Raynos\r\n - Gozala\r\n\r\n## MIT Licenced\r\n\r\n  [1]: https://secure.travis-ci.org/Raynos/pd.png\r\n  [2]: http://travis-ci.org/Raynos/pd\r\n  [3]: http://raynos.org/blog/4/Doing-Object-Oriented-JavaScript\r\n  [4]: http://www.2ality.com/2011/06/prototypes-as-classes.html\r\n  [5]: http://raynos.org/blog/5/Doing-Object-Oriented-Javascript---part-2\r\n  [6]: http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3\r\n  [8]: https://gist.github.com/1384024\r\n  [9]: http://raynos.org/blog/17/Improving-ES5-OO-with-pd","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"directories":{}}},"maintainers":[{"email":"leecade@163.com","name":"leecade"},{"email":"raynos2@gmail.com","name":"raynos"}],"time":{"modified":"2022-06-23T16:24:15.581Z","created":"2011-09-01T15:15:02.496Z","0.0.1":"2011-09-01T15:15:03.838Z","0.1.0":"2011-09-01T15:51:23.868Z","0.1.1":"2011-09-01T16:03:16.725Z","0.2.1":"2011-10-19T17:11:19.686Z","0.3.0":"2011-11-10T16:11:00.101Z","0.3.1":"2011-11-10T16:29:47.021Z","0.3.3":"2011-11-21T17:48:44.988Z","0.3.4":"2011-11-25T16:08:24.896Z","0.3.5":"2011-12-01T13:48:34.129Z","0.3.6":"2011-12-02T16:50:28.879Z","0.3.7":"2011-12-08T23:56:57.823Z","0.3.8":"2011-12-09T00:05:06.343Z","0.3.9":"2011-12-11T22:55:14.086Z","0.4.0":"2012-01-03T21:20:40.782Z","0.4.1":"2012-01-03T21:55:15.097Z","0.4.2":"2012-01-06T13:41:41.295Z","0.5.0":"2012-01-29T17:25:55.790Z","0.6.0":"2012-02-13T12:57:12.328Z","0.6.1":"2012-02-13T12:59:38.663Z","0.6.2":"2012-03-02T18:32:23.375Z","0.6.3":"2012-03-22T00:38:35.085Z","0.7.0":"2012-04-20T08:07:00.235Z","0.7.1":"2012-04-20T09:23:23.730Z","0.7.2":"2012-04-20T09:39:36.864Z","0.7.3":"2012-04-20T10:09:37.884Z","0.7.4":"2012-04-21T16:08:01.482Z","0.8.0":"2012-05-05T07:02:29.311Z","0.8.1":"2012-05-05T08:53:54.928Z"},"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/pd.git"}}