If I'm not mistaken, bind() has the same technical drawbacks as using an
anonymous function (higher memory usage, more garbage collection, and
slower says Tim), but it does solve the maintainability / prettiness issue.

I just want to point out that Raspberry Pi is now shipping.
NodeJS is a very attractive option for development.

My own experience with my ARM-based media server has lead me to be a
believer in prototypes and leaner code. I can't say that one little anony
here and there is going to blow up an application, but I know for a fact
that there are significant performance gains when they are avoided.

I know it doesn't seem like a big deal now. But one day you may change your
mind.

AJ ONeal

On Fri, Jun 8, 2012 at 2:22 PM, George Stagas <gsta...@gmail.com> wrote:

> No need to change the API, we have .bind() - use the language
> features, don't reinvent them.
>
> 2012/6/8 Tim Caswell <t...@creationix.com>:
> >
> >
> > On Fri, Jun 8, 2012 at 2:10 PM, tjholowaychuk <tjholoway...@gmail.com>
> > wrote:
> >>
> >> what's wrong with .bind() ?
> >>
> >
> > Mainly the overhead.  Bind creates a new function every time it's called,
> > and calling the bound function is a bit slower, especially in V8. (Insert
> > statement about performance only mattering if it's significant...)
> >
> > I usually will bind all my methods from the prototype that will be used
> as
> > callbacks to the instance itself inside the constructor.  This gives me a
> > ton more "own" properties, but otherwise is fairly elegant.
> >
> >>
> >> On Jun 8, 11:52 am, AJ ONeal <coola...@gmail.com> wrote:
> >> >     emitter.on('data', myModule.dataHandler, myModule);
> >> >
> >> > Even if myModule were to subclass EventEmitter, wouldn't I still need
> to
> >> > pass in the `myModule` instance so that I get the correct `this`? I
> >> > don't
> >> > think I understood what you meant by that.
> >> >
> >> > And then these cases as well:
> >> >
> >> >     fs.readFile(file, encoding, myModule.fileHandler, myModule);
> >> >
> >> >     process.nextTick(myModule.tickHandler, myModule);
> >> >
> >> > The list goes on. Obviously not a small project. Not difficult either,
> >> > just
> >> > tedious.
> >> >
> >> > AJ ONeal
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > On Fri, Jun 8, 2012 at 12:42 PM, Tim Caswell <t...@creationix.com>
> >> > wrote:
> >> > > Actually event emitters already call in the scope of the emitter, so
> >> > > there
> >> > > is no need for a specific "this" value there.  Just subclass
> >> > > EventEmitter
> >> > > and use normal methods.
> >> >
> >> > > On Fri, Jun 8, 2012 at 1:34 PM, AJ ONeal <coola...@gmail.com>
> wrote:
> >> >
> >> > >> If you're going to use `this` then you must have a callback. It
> would
> >> > >> make no sense to have a `this` and nothing to apply it to.
> >> >
> >> > >> You think EventEmitters would feel the overhead of the if?
> >> >
> >> > >>     // context is Array, Object, or Function.
> >> > >>     // Numbers, Strings, and Booleans need not `apply` (very punny)
> >> > >>     if (context) {
> >> > >>       fn.call(context, a, b, c);
> >> > >>     } else {
> >> > >>       fn(a, b, c);
> >> > >>     }
> >> >
> >> > >> As far as the guesswork, well, I hear you on that. I've already
> done
> >> > >> my
> >> > >> ranting at UtahJS Conf. Put this as one more in the bucket of
> reasons
> >> > >> that
> >> > >> callbacks-last was not a well-thought out idea....
> >> >
> >> > >> AJ ONeal
> >> >
> >> > >> On Fri, Jun 8, 2012 at 12:27 PM, Tim Caswell <t...@creationix.com>
> >> > >> wrote:
> >> >
> >> > >>> I think it's a useful addition, but it does cause a little
> overhead
> >> > >>> (though it's probably not noticeable compared to the actual work
> the
> >> > >>> async
> >> > >>> function is doing).  EventEmitters might feel the pain since they
> >> > >>> are sync.
> >> > >>>  I do worry that it makes things harder for our argument guessing
> >> > >>> code that
> >> > >>> assumes the last arg is a callback.  Now there will be an optional
> >> > >>> argument
> >> > >>> after the callback that can be anything (including another
> function)
> >> >
> >> > >>> On Fri, Jun 8, 2012 at 1:18 PM, AJ ONeal <coola...@gmail.com>
> wrote:
> >> >
> >> > >>>> Yes, That's what I am suggesting.
> >> >
> >> > >>>> AJ ONeal
> >> >
> >> > >>>> On Fri, Jun 8, 2012 at 12:17 PM, Tim Caswell
> >> > >>>> <t...@creationix.com>wrote:
> >> >
> >> > >>>>> So this proposal is to modify the API of all async functions to
> >> > >>>>> have
> >> > >>>>> an extra thisp argument after the callback argument (like done
> in
> >> > >>>>> Array.prototype.forEach)?
> >> >
> >> > >>>>> On Fri, Jun 8, 2012 at 1:06 PM, AJ ONeal <coola...@gmail.com>
> >> > >>>>> wrote:
> >> >
> >> > >>>>>> I would like to propose that an additional parameter, `context`
> >> > >>>>>> be
> >> > >>>>>> added to core node modules that accept callbacks to give
> >> > >>>>>> this-ness to the
> >> > >>>>>> callback.
> >> >
> >> > >>>>>> The reason being is that I'm trying to eliminate anonymous
> >> > >>>>>> callbacks
> >> > >>>>>> from my code and have generally cleaner, more readable code (as
> >> > >>>>>> well as
> >> > >>>>>> lower memory usage and less garbage collection).
> >> >
> >> > >>>>>> I don't know if this has been discussed before, but I'd like to
> >> > >>>>>> put
> >> > >>>>>> it on the table.
> >> >
> >> > >>>>>> AJ ONeal
> >
> >
>

Reply via email to