Peter Michaux petermichaux at
Wed Nov 19 17:47:18 PST 2008

On Wed, Nov 19, 2008 at 11:43 AM, Jeff Watkins <watkins at> wrote:
> I'd absolutely second the catchall request. I currently jump through nasty
> hoops or restrain my designs simply to avoid the lack of this capacity. And
> if there were equivalents to valueForMissingKey and setValueForMissingKey in
> addition to a function catchall, that would be even better.

I think the catchall(s) need to be able to catch all these kinds of
missing messages. API design is always a matter of taste. For example,
should the API be made high-level, less verbose to use and give up
some flexibility OR should it be low-level, more verbose, and have
more flexibility?

For this catch all situation, I think the API should be very low
level. The programmer should be playing at the level where he is
actually concerned with things like "[[Get]]" etc. I think there
should only be one catchall method and the programmer of the catchall
can branch on the arguments like "[[Get]]".

obj.__catchAll__('[[Get]]', 'foo');
obj.__catchAll__('[[Put]]', 'foo', 21);
obj.__catchAll__('[[Call]]', 'bar', 1, 2, 3);

Yes the code inside the would be more verbose than separate catchalls
for getters, setters, methods. The above, however, would allow a
framework for a "nicer" API to be built in ES code (like, for example,
Ajax libraries provide a framework for callbacks depending on response
status code.)

I think this low-level control would help enable a self-hosting ES if
a completely blank "object" was available: whatever the Object
prototype object's prototype should be (rather than the current null.)


> On 18 Nov, 2008, at 10:19 PM, Peter Michaux wrote:
>> I don't see anything in the strawman wiki pages about a catchall
>> method for an object. I think this is something that is really missing
>> from the language and would substantially change the way some programs
>> are structured.
>> The only ways I know of to currently get the equivalent behavior to a
>> catch-all now is to either make objects as functions of their
>> messages, or to make a "send" function. Both of these options mean
>> leaving the standard object.message(a, b, c) message-passing syntax
>> behind and use object("message", a, b, c) or send(object, "message",
>> a, b, c) syntax. Both of these are substantially slower (though
>> infinitely and enjoyably flexible.)
>> Are catchalls candidates to be added to the strawman pages?
>> Peter
>> _______________________________________________
>> Es-discuss mailing list
>> Es-discuss at
> _______________________________________________
> Es-discuss mailing list
> Es-discuss at

More information about the Es-discuss mailing list