On Sun, Aug 24, 2008 at 7:41 PM, Brendan Eich <[EMAIL PROTECTED]> wrote: > On Aug 24, 2008, at 7:36 PM, Peter Michaux wrote: > >> On Sun, Aug 24, 2008 at 6:05 PM, Brendan Eich <[EMAIL PROTECTED]> >> wrote: >>> On Aug 24, 2008, at 4:09 PM, Mark S. Miller wrote: >> >> [snip] >> >>> Others on this list should comment on class-private vs. instance- >>> private. >> >> If this is just a poll then I'm all for instance-private. >>
(order restored) > Polls are not so good, compared to reasons. Could you give your > rationale and talk about the trade-offs, in your experience? > I'm not Peter, but here are my observations: How to make a private variable? Option 1: "Fake Private" - uses _someVar, and even uses JSDocToolkit @private or @internal. Pros: Refactoring that introduces "private" instance variables won't require changing to "Power Constructor" or other closure-based approach. Cons: Fake. Example: http://developer.yahoo.com/yui/docs/menu.js.html _nCurrentMouseX: 0 is the default in Menu.prototype. In _onMouseOver, the value is set on the instance. It is as if the desire is to inherit the privateness, it is almost as if they wanted [[CanPut]]("_nCurrentMouseX") to be true only in the Menu code in that js file. Option 2: Closures. Wrap everything in a closure and have the "private" variables not accessible from the outside. This includes the Module Pattern, Power Constructor (Putting everything in the constructor), and Exporting Pattern approaches. Closure Pros: * Can use shortened lookup chains for "local" variables in the closure. * Can minify the "private" variables using a compressor. Closure Cons: * Private instance variables don't fit into the typical constructor-function-with-a-prototype idiom. Power Constructor cons: * Long constructor * increases the scope chain of each instance method, which then has reference to things it might not want or need (all variables remain in scope). Module Pattern cons: * increases the scope chain of each instance method, which then has reference to things it might not want or need (all variables remain in scope). * "private" variables are not easily distinguished from "local shortcut" variables. The Exporting Pattern is used to export some methods in a closure to properties of another object, keeping some "private" variables/functions. Exporting Pattern cons: * can lead to "God Object" or "Big Ball of Mud" * can be difficult to read/understand Garrett > /be > >> Peter >> _______________________________________________ >> Es-discuss mailing list >> Es-discuss@mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss > > _______________________________________________ > Es-discuss mailing list > Es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > _______________________________________________ Es-discuss mailing list Es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss