В объекте ladder есть несколько значение step изначально равное нулю и 3 функции.
Первая (up) - берёт объект ladder (в котором сама находится) через this, находит там значение step и увеличивает его на 1, после чего возвращает новое значение всего объекта (ladder).
Вторая (down) делает тоже что и первая, но уменьшает на 1 а не увеличивает.
Третья берёт step из объекта через this, делает alert (открывает диалоговое окно) в котором написано значение step, возвращает значение объекта ladder.
Функции эти можно использовать как:
ladder.up(); // 1
ladder.up(); // 2
ladder.down(); // 1
ladder.down(); // 0
ladder.showStep(); // 0
, так и так:
ladder.up().up().down().down()showStep(); // 0
Объяснение:
Мы обращаемся к ladder и используем функцию up. Единственное что она делает, это увеличивает значение ladder.step и после её использования объект ladder как и был объектом со значением step и функциями, так и остался. Изменяется только step. return у всех этих функций возвращение всего объекта ladder, а значит... Напримеррр:
ladder.up().up() делает тоже самое, что и ladder.up(), но дважды.
ladder.up().down() делает ТОЖЕ что и ladder.up(); ladder.down();
ВОТ! Я не знаю с чего вы взяли что нельзя писать заного. Здесь просто это упрощено, чтобы писать заного было необязательно и можно было сократить количество строк кода!