По сабжу.
вот вам наглядный пример, как это работает
someObject = {
a: 1,
firstStep: function(){this.a++; return this},
secondStep: function(){this.a++; return this}
}
alert(someObject.firstStep().secondStep().a)
тут вы явно пропихиваете контекст через возвраты. С with было бы так
someObject = {
a: 1,
firstStep: function(){this.a++},
secondStep: function(){this.a++}
}
with(someObject) firstStep(), secondStep(), alert(a)