Lander, кстати, если вы не пользуетесь транспайлерами, то под IE это у вас тоже не будет работать, т.к. arrow function. Можно переписать как обычную функцию.
Lander, во-первых, если бы вы сами попробовали почитать про tpl strings, вы бы увидели, что всё комьюнити и все разработчики считают их хорошей идеей, а значит они в любом случае когда-нибудь станут стандартом. Во-вторых, приличные люди чаще всего не отказываются от удачных языковых решений только потому что они не поддерживаются каким-нибудь ослом, а просто используют транспайлер, например тот же babel решит проблему. В-третьих, что значит "андроид идет лесом"? Андроид использует хромиум по умолчанию, а хромиум это поддерживает.
Дико плюсую Coder321: туча народу тратили своё время на стандартизацию template strings, а кто-то решил отказаться от них только потому, что ему не нравится символ "$"...
"в новом стандарте ES6 с синтаксисом классов и вовсе нет методов в конструкторе" - конечно есть.
"я не вижу разницы между двумя методами" - разница в том, что один объявлен как свойство экземпляра, а другой - как свойство прототипа, методы из которого наследуются экземплярами. Технически, это исчерпывающий список различий. Остальное - последствия, например хранение метода в каждом экземпляре приведет к увеличенному расходу памяти и т.д.
"Когда использовать методы в конструкторе, а когда — в прототипе?" - и в том и в другом случае ответ один: когда это нужно. Если не видите нужды в чем-то, то не делайте этого; все просто. Нужно забить память объявлением однотипных функций? Объявляйте методы в конструкторе. Не нужно? Объявляйте в прототипе.
Хорошего примера объявления методов в конструкторе, к сожалению, не могу привести.
Алексей Дзюба, эээ, ну как бы обработчики исполняются в контексте элемента к которому они привязаны, то есть this указывает на ваши кнопки, у которых естественно нету ни свойства i, ни свойства images.