I agree with Garrett both in style and execution and I'd like to take his
example one step further...
var counter = new function() {
var i = 0;
this.next = function() {
return ++i;
};
this.reset = function() {
return (i = 0);
};
};
There is no need for assigning and declaring this.next, function next(){}
separately - I'm going to assume that was just typed hastily. And for fun i
implemented th reset function.. but it also returns the reset value - which
keeps the api consistent ;)
Rick
On Sun, Dec 12, 2010 at 9:00 PM, Garrett Smith <[email protected]>wrote:
> On 12/11/10, Diego Souza <[email protected]> wrote:
>
> [snip[
>
> > 2010/12/7 Rey Bango <[email protected]>
> >
> >> Hi guys,
> >>
> >> Angus Croll just posted a great article about namespacing in JavaScript.
> >> Definitely worth the read:
> >>
> >>
> http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/
>
> A lot of missing semicolons there.
>
> I don't like the idea of setting global properties `next` and `reset`
> as methods of the `window`. And what's `myApp = {};` got to do with
> any of that anyway? Seems irrelevant for this example:
>
> 01 var myApp = {};
> 02 (function(context) {
> 03 var id = 0;
> 04
> 05 context.next = function() {
> 06 return id++;
> 07 };
> 08
> 09 context.reset = function() {
> 10 id = 0;
> 11 }
> 12 })(this);
>
> The article advocates the use of `apply` to "provide natural
> separation of context and arguments". I don't see any advantage there.
> 01 var myApp = {};
> 02 (function() {
> 03 var id = 0;
> 04
> 05 this.next = function() {
> 06 return id++;
> 07 };
> 08
> 09 this.reset = function() {
> 10 id = 0;
> 11 }
> 12 }).apply(myApp)
> 13
> 14 window.console && console.log(
> 15 myApp.next(),
> 16 myApp.next(),
> 17 myApp.reset(),
> 18 myApp.next()
> 19 ) //0, 1, undefined, 0
>
> That way requires a few eyeball scans up and down the code. It isn't
> the end of the world but I would rather just use NewExpression.
>
> var counter = new function() {
> var i = 0;
> this.next = next;
> function next() {
> return i++;
> }
> };
>
> With NewExpression, the beginning shows that the context is a new
> object creation and that the method assignments that fall below are
> definitely going to be on that object. I like the way it reads,
> top-down. To me, NewExpression seems clearer than saying "create an
> object, then create a FunctionExpression, then call that
> FunctionExpression using `apply` and passing in the new object.
> --
> Garrett
>
> _______________________________________________
> JSMentors mailing list
> [email protected]
> http://jsmentors.com/mailman/listinfo/jsmentors_jsmentors.com
>
> List Archive:
> http://jsmentors.com/pipermail/jsmentors_jsmentors.com/
>
_______________________________________________
JSMentors mailing list
[email protected]
http://jsmentors.com/mailman/listinfo/jsmentors_jsmentors.com
List Archive:
http://jsmentors.com/pipermail/jsmentors_jsmentors.com/