Keramet,
Только один нюанс. В Вашем примере мы имеем дело с возвратом нового объекта, там данные не мутируют. Точней ваш случай можо проилюстрировать вот этим примером
someObject = function(value){
this.value = value
}
someObject.prototype.add = function(n){return new someObject(this.value + n)}
alert( new someObject(1).add(1).add(2).value)
т.e. тот же самый принцип, только ничего не меняем. эдакая монада.