TJ,

I don't particularly think this is a problem or even a new problem
(wouldn't the current let you do this as well?). This sounds like
protecting the developer from themselves. I think as long as you
sufficiently state what will happen in a particular instance then it
is perfectly reasonable to allow each individual developer to handle
it as they see fit.

Allen Madsen
http://www.allenmadsen.com



On Wed, Sep 9, 2009 at 7:29 AM, T.J. Crowder<t...@crowdersoftware.com> wrote:
>
> Hi all,
>
> I thought of a wrinkle today:  Mixins.  This new mechanism modifies
> function instances if they override base class functions (it leaves
> them alone if they don't).  So if you mix in something that has a
> function with the same name as a parent class's function, we will set
> a $super property on the mixin function's instance.  That seems wrong
> to me, mixins should be read-only as far as the mechanism is
> concerned, IMHO.
>
> Now, in _practical_ terms, unless the mixin function calls $super
> (which seems an odd thing for a mixin to do, but I can come up with an
> edge case use case for it), it doesn't matter much.  But if A) the
> mixin function does (presumably optionally) call $super, and B) more
> than one class mixes the mixin in, AND C) the mixin overrides one of
> the functions in at least one of those classes, you get class
> crosstalk -- a very bad thing.
>
> My first thought for how to deal with this was stupid and I'll spare
> you.
>
> My *second* (hopefully not stupid) thought was to mark mixin functions
> with a property telling us to leave them alone.  I see two
> ramifications to doing that:
>
> 1. An API change:  To define a mixin, you'd ideally want to run it
> through something (something we'd presumably provide) that spins
> through and marks the functions so we leave them alone.
>
>    var MyMixIn = Class.createMixin(...);
>
> 2. Mixins can't even optionally participate in supercalls, which they
> can with the current mechanism.
>
> Now, for me, #2 is not a problem.  I'm not thrilled about introducing
> #1, although really you only have to do that to protect against an
> edge case you're probably not going to run into.  It's someting a
> library of mixins would want to be sure to do, but within a non-
> library project, not sure it really matters.
>
> -- T.J.
>
> On Sep 9, 9:28 am, Jim Higson <j...@wikizzle.org> wrote:
>> On Wednesday 09 September 2009 09:02:28 Jim Higson wrote:
>>
>> > > I see where you're coming from, but FWIW I'm with Allen on this one.
>> > > Also, there's no standard way to get the name of a function until
>> > > ECMAScript5 (which standardizes the truly outrageous idea that
>> > > function instances should have -- gasp! -- a "name" property), and at
>> > > the moment although Firefox 3.5, Chrome 2, and Safari 4 all already
>> > > have that property, IE7 (at least, haven't tested IE8) and Opera10 do
>> > > not.
>>
>> > I have a hunch we could get function names in the same way that we
>> > implement Function#argumentNames. A regex on the toString.
>>
>> I should have looked first - this is function decompilation and considered a
>> bad thing.
>>
>> --
>> Jim
>> my wiki ajaxification thing:http://wikizzle.org
>> my blog:http://jimhigson.blogspot.com/
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to 
prototype-core-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to