MooTools cannot rebind this
on the fly for every method called. This would be impossible.
You have to understand that every single call to your chain is in the same scope, therefore this
remains the same. jQuery and every single other framework have the same problem. If you want to do two operations on an element at the same time, you must store the object in a variable and then use that variable to reference the object exactly like you did in your second example:
var input = $('buttonContainer').getElement('input');
input.set('value', input.get('value') + ' ');
this
can only change when the scope changes (which in JavaScript is always when you hit a brace {}
enclosing a function). This is not a limitation of MooTools' chaining. It's the way JavaScript in general works.