Consider following example:
var Foo=function () { var number = 1; self.number = 1; } Foo.prototype.bar = function () { console.log("test"); }; var foo = new Foo(); foo.bar();
Notice here that in line Foo.prototype.bar = function () I didn't write "var".
This code will work perfectly, in console you will see "test".
Now check following code:
var Foo=function () { var number = 1; self.number = 1; return {inc: function() { self.number = self.number + 1; }} } Foo.prototype.bar = function () { console.log("test"); }; var foo = new Foo(); foo.bar();
This code will not work, we will receive error "Uncaught TypeError: undefined is not a function", because with return we will loose "this". Solution is to add return this:
var Foo=function () { var number = 1; self.number = 1; return this; } Foo.prototype.bar = function () { console.log("test"); }; var foo = new Foo(); foo.bar();