diff --git a/app/models/Base.js b/app/models/Base.js index 1a0bd55..dd2722b 100755 --- a/app/models/Base.js +++ b/app/models/Base.js @@ -1,10 +1,13 @@ +var util = require('util'); module.exports = function(db) { this.db = db; }; module.exports.prototype = { extend: function(properties) { - var Child = module.exports; - Child.prototype = module.exports.prototype; + var Child = function(db) { + this.db = db; + }; + util.inherits(Child, module.exports); for(var key in properties) { Child.prototype[key] = properties[key]; } diff --git a/app/tests/base.model.spec.js b/app/tests/base.model.spec.js index 251abe8..2a7d105 100755 --- a/app/tests/base.model.spec.js +++ b/app/tests/base.model.spec.js @@ -14,7 +14,22 @@ describe("Models", function() { }); var model2 = new OtherTypeOfModel(dbMockup); expect(model2.db).toBeDefined(); + expect(model2.setDB).toBeDefined(); expect(model2.myCustomModelMethod).toBeDefined(); next(); - }) + }); + it("should not modify the base prototype chain", function(next) { + var model = new Model(dbMockup); + var A = model.extend({ + prop: 20 + }); + var B = model.extend({ + prop: 30 + }); + var a = new A(); + var b = new B(); + expect(a.prop).toBe(20); + expect(b.prop).toBe(30); + next(); + }); }); \ No newline at end of file diff --git a/app/tests/base.view.spec.js b/app/tests/base.view.spec.js index 733094c..1e4659d 100755 --- a/app/tests/base.view.spec.js +++ b/app/tests/base.view.spec.js @@ -25,4 +25,18 @@ describe("Base view", function() { expect(otherViewInstance.render).toBeDefined(); otherViewInstance.render({prop: 'yes'}); }); + it("should not modify the base prototype chain", function(next) { + var v = new View(); + var A = v.extend({ + prop: 20 + }); + var B = v.extend({ + prop: 30 + }); + var a = new A(); + var b = new B(); + expect(a.prop).toBe(20); + expect(b.prop).toBe(30); + next(); + }); }); \ No newline at end of file diff --git a/app/views/Base.js b/app/views/Base.js index 41da977..1968623 100755 --- a/app/views/Base.js +++ b/app/views/Base.js @@ -1,11 +1,15 @@ +var util = require('util'); module.exports = function(response, template) { this.response = response; this.template = template; }; module.exports.prototype = { extend: function(properties) { - var Child = module.exports; - Child.prototype = module.exports.prototype; + var Child = function(response, template) { + this.response = response; + this.template = template; + }; + util.inherits(Child, module.exports); for(var key in properties) { Child.prototype[key] = properties[key]; }