.. cascade operator

# Hugh Jackson (12 years ago)

Many js APIs rely heavily on chaining, which is somewhat limited, in that the object upon which further methods are to be called has to be returned; as well as providing setter methods. Is there space in JS for this proposal (taken from dartwww.dartlang.org/articles/m1-language-changes/#cascades )?:

query('#my-form').query('button')

..classes.add('toggle')

..text = 'Click Me!'

..labels.add(toggleLabel);

Which desugars to:

query('#my-form').query('button').classes.add('toggle');

query('#my-form').query('button').text = 'Click Me!';

query('#my-form').query('button'.labels.add(toggleLabel);

IOW, .. evaluates the expression that follows it, and returns the value of the previous expression (discarding the value returned from the expression being evaluated).

I understand that .{ has been considered in this context, but (afaic) it doesn't seem to cover as many bases as minimally.

Hugh

# Hugh Jackson (12 years ago)

Apologies for the formatting; i promise it looked far more reasonable in gmail ;)

# Brendan Eich (12 years ago)

See blog.mozilla.org/dherman/2011/12/01/now-thats-a-nice-stache -- I'm not sure there is a strawman on the wiki, though.

# Hugh Jackson (12 years ago)

Very interesting;

# Man Hoang (6 years ago)

This operator should have been added years ago. It would enable many APIs to return more appropriate results instead of this.

For example, Set.prototype.add(value) could return a boolean indicating if an item was actually added instead of this.

# Luan Nico (6 years ago)

I agree with this, Dart has the exact thing and it's amazing. Not sure what's the status or reason for not following through, though.