Javascript new object (function ) vs inline invocation
Asked Answered
O

3

7

Is there any considerations to determine which is better practice for creating an object with private members?

var object = new function () { 
   var private = "private variable";
   return {
       method : function () { 
           ..dosomething with private;
       }
   }
}

VS

var object = function () {
 ...
}();

Basically what is the difference between using NEW here, and just invoking the function immediately after we define it?

Outguess answered 5/4, 2010 at 22:33 Comment(1)
Never ever use new function(){…}! Admittedly, in this particular case where you return from the function it's not that bad.Piwowar
M
9

The new operator causes the function to be invoked like a Constructor Function.

I've seen that pattern before, but I don't see any benefits of using it.

The purpose of the new operator is to create an object (the this value inside the constructor), setting the right [[Prototype]] internal property, to build the prototype chain and implement inheritance (you can see the details in the [[Construct]] operation).

I would recommend you to stay with the inline invocation pattern.

Maryellen answered 5/4, 2010 at 22:37 Comment(1)
While I agree with CMS because you are using a revealing module pattern and relying on lexical scoping - I would clarify that new is appropriate when creating a class-like object built upon a prototype pattern - for example a BackboneJS Model or View.Dayflower
G
1

If you're using functions as event handlers you can get memory leaks. Have a look at some of the articles

Guayule answered 5/4, 2010 at 22:35 Comment(0)
B
1

This link provides statistics which also confirms that inline invocation pattern is better.

Please note that the measurement is in operations per second which the higher the better

Beeves answered 21/10, 2013 at 8:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.