how bad would that be?
Could it end up to be the "performance bottleneck" easily? Because maybe it
doesnt matter so much?
In the end, i feel that it would make things a lot more readable, by
getting rid of the need to use 3 "keywords":
"new", "prototype" and "this".

According to jsperf, the "closure method" is even way faster...
=> http://jsperf.com/prototypemodule-vs-closuremodule

Maybe that test has to be refined?


2015-01-11 23:54 GMT+01:00 Matt <[email protected]>:

> If you do that you probably lose some of the performance enhancements V8
> does by converting things internally to classes.
>
> On Sat, Jan 10, 2015 at 8:39 PM, Alexander Praetorius <[email protected]>
> wrote:
>
>> Many people use *"this"*, *"prototype"* and *"new"*, like:
>>
>>
>>> *module.exports = function Car (name, cost, mpg, alternative) {*
>>> *  this.name <http://this.name> = name;*
>>> *  this.cost = cost;*
>>> *  this.env_damage = mpg;*
>>> *  this.alternative  = alternative;*
>>> *};*
>>> *Car.prototype.appeal = function() {*
>>> *  return(this.cost/this.mpg);*
>>> *};*
>>> *Car.prototype.snark = function() {*
>>> *  return(this.alternative.advise());**};*
>>
>>
>> I think that is very "beginner unfriendly" and a lot of people i know got
>> very confused by
>> *"prototypes"* and the different way* "this"* can be set and how it can
>> trip you over.
>> And i remember a time when i wanted to transform an instance after
>> creation, but
>> had no influence over all the many places which used "new Name(...)", so
>> i kinf of
>> dislike the use of *"new"* too.
>> I wonder if it would be bad to get rid of those and instead write the car
>> module like:
>>
>>
>>
>>> *module.exports = function Car (name, cost, mpg, alternative) {*
>>> *  var api = {*
>>> *    name: name,*
>>> *    cost: cost,*
>>> *    env_damage: mpg,*
>>> *    alternative: alternative,*
>>> *    appeal: function appeal () { api.cost / api.mpg; },*
>>> *    snark: function snark  () { api.alternative.advise(); }*
>>> *  };*
>>> *  return api;**};*
>>
>>
>>
>>
>> 2015-01-10 17:12 GMT+01:00 // ravi <[email protected]>:
>>
>>> On Jan 10, 2015, at 5:04 AM, Prabhash Rathore <[email protected]>
>>> wrote:
>>> >
>>> > Based on your replies, I think this is the best way to represent a
>>> data object as it's just data and object can represent this data:
>>> > module.exports = {
>>> >
>>> >     name
>>> > : '';
>>> >
>>> >     department
>>> > : '';
>>> > }
>>> > However I have noticed people using function() to create data objects
>>> and then they just return an object inside the function (see below
>>> example)? Is there any specific use case or reason on using function
>>> instead of using just object literal?
>>>
>>>
>>>
>>> It depends on what it is you want your module to offer. Say the module
>>> provides a bunch of utility functions. Then you may just choose to export
>>> each function and be done:
>>>
>>> str_utils.js:
>>>
>>> exports.uncamelcase   = function(str) { …. };
>>> exports.is_palindrome = function(str) { …. };
>>> exports.is_numeric    = function(str) { …. };
>>>
>>> Then someone can use it thus:
>>>
>>> var str_utils = require(‘str_utils’);
>>>
>>> if( str_utils.is_palindrome(person_name) === true )
>>>     console.log(“Well, aren’t you special!”);
>>>
>>> On the other hand, if your module returns a constructor/class to be used
>>> for instantiating new objects, then you may wish to do this:
>>>
>>> module.exports = Car;
>>>
>>> function Car(name, cost, mpg, alternative)
>>> {
>>>     this.name = name;
>>>     this.cost = cost;
>>>     this.env_damage = mpg;
>>>     this.alternative = alternative;
>>> }
>>>
>>> Car.prototype.appeal =
>>> function()
>>> {
>>>     return(this.cost/this.mpg);
>>> };
>>>
>>> Car.prototype.snark =
>>> function()
>>> {
>>>     return(this.alternative.advise());
>>> };
>>>
>>> Then someone could:
>>>
>>> var Car = require(‘car’);
>>> var metro = require(‘metro’);
>>>
>>> var new_car = new Car(‘Hummer’, 80000, 2, metro);
>>>
>>> if( new_car.appeal() > 700 )
>>>     console.log(“Congratulations on your fancy”, new_car.name, “but”,
>>> new_car.snark());
>>>
>>> Etc. Keep in mind the part played by require/module caching (if you
>>> return an object, it will be cached and returned from the cache at the next
>>> require — this may or may not be what you want: I use it as a way to load
>>> dependencies without passing them around).
>>>
>>>         —ravi
>>>
>>>
>>> --
>>> Job board: http://jobs.nodejs.org/
>>> New group rules:
>>> https://gist.github.com/othiym23/9886289#file-moderation-policy-md
>>> Old group rules:
>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/nodejs/6CC0F73D-A104-487B-83F6-0930105B236C%40g8o.net
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
>> Job board: http://jobs.nodejs.org/
>> New group rules:
>> https://gist.github.com/othiym23/9886289#file-moderation-policy-md
>> Old group rules:
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/nodejs/CAN5%2BLUuVpyXqF-SfGjBF_WuRR5LqN4LTAZQ77%3DseQjtiAY-VmQ%40mail.gmail.com
>> <https://groups.google.com/d/msgid/nodejs/CAN5%2BLUuVpyXqF-SfGjBF_WuRR5LqN4LTAZQ77%3DseQjtiAY-VmQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> Job board: http://jobs.nodejs.org/
> New group rules:
> https://gist.github.com/othiym23/9886289#file-moderation-policy-md
> Old group rules:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/nodejs/CAPJ5V2ZLG9FzH2GK%2BxxGn6c8-bXFZR8iDWVyNbh0RXEhR_qy7g%40mail.gmail.com
> <https://groups.google.com/d/msgid/nodejs/CAPJ5V2ZLG9FzH2GK%2BxxGn6c8-bXFZR8iDWVyNbh0RXEhR_qy7g%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/CAN5%2BLUsPdt694cCFmY1%2BUF%3Ds_%3DcCWDmUS4ozACzd2zez525N%2BA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to