На последний вопрос ответ простой - доступ к methods внутри init же есть, просто вызвать его через .call(this, ...).
Приведённые в вашем примере реализации имеют очень большое отличие - в одном случае методы хранятся только в одном месте - объекте methods, в другом случае - записываются в каждый объект. Разница такая же, как между методами в prototype и методами, которые записываются в this в конструкторе - в первом случае, они записаны лишь в одном месте, во втором - их реализации записываются в каждый объект.
Проще говоря, это просто сильно неоптимально со стороны расходования памяти.