Вы не можете на самом деле создать экземпляр класса без цикла. Вы можете попробовать eval
. Но это не рекомендуется. Это плохая практика.
Теперь позвольте мне объяснить, почему это невозможно.
JavaScript не имеет классов и экземпляров, он имеет только объекты, которые могут делегировать другим объектам.
Чтобы создать два объекта на основе одного объекта, но за кулисами на самом деле не существует двух «экземпляров» объекта Point, есть только два объекта, делегирующих исходный. Когда вы используете new, JavaScript фактически просто создает объект и присваивает его прототип объекту, возвращаемому функцией конструктора. Представьте, что пример был расширен, чтобы включить общий метод, подобный этому:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.logCoords = function () {
console.log(this.x, this.y);
};
var a = new Point(1, 2);
console.log(a.x); // logs '1'
a.logCoords(); // logs '1 2'
За кулисами происходит нечто вроде этого:
var Point = function (x, y) {
this.x = x;
this.y = y;
};
Point.prototype.logCoords = function () {
console.log(this.x, this.y);
};
var a = {};
a.__proto__ = Point.prototype; // see note below about this
a.constructor = Point;
a.constructor(1, 2);
console.log(a.x); // logs '1'
a.logCoords(); // logs '1 2'