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.
