I have either created something beautiful or something monstrous, and I'm not really sure which, and I don't know where else to turn but here. What I've done:
var MyObject = function(opts) {
//init code, set vals, runs when 'new MyObject()' is called
}
MyObject.prototype = (function() {
//private helper functions
//scoping is a pain, but doable
function myPrivateFunction() {}
return {
publicFunc1: function() { /* uses myPrivateFunction() */ }
, publicFunc2: function() { /* uses myPrivateFunction() */ }
};
})();
MyObject.prototype.publicFunc3 = function() {}
MyObject.prototype.publicFunc4 = function() {}
MyObject.prototype.publicFuncEtc = function() {}
To my surprise, this works, and takes care of a pretty significant problem of creating reusable private functions for various public functions. Of course, I have to do some scoping for the this
object, but I feel it's a small price to pay for being able to use private reusable functions. I left the other functions on the outside to avoid having to deal with scoping.
My question is: is this a code smell? and as a corollary, is there a better way to do this?
publicFunc3
can't seemyPrivateFunction
... sort of smells. And of course privates don't have athis
, which sort of defeats OO design. Why not just wrap the whole thing in a IIFE and put the private stuff inside? – Dagg Apr 24 '13 at 22:37