Динамически создать переменные нельзя. Можно работать с полями объекта, что ты как раз и делал с объектом window (ты не создавал переменные, f писал поля в объект window, что является плохой практикой, т.к. фактически ты пишешь в global scope).
Создай объект и работай с его полями, например так.
let obj = {};
for (let i = 0; i < 1200; i++) {
obj[`button${_i}`] = new Button();
}
Кстати, советую посмотреть для общего развития в сторону dynamic fields - нововведение из ES6.
Можно писать вот так:
let foo = 'bar';
let obj = {
[foo]: 'bar'
}; // => { bar: 'bar' }