Создать объект из строки - программирование
Подтвердить что ты не робот

Создать объект из строки

Можно ли создать новый объект с помощью строки? Например, как преобразовать строку "продукт" в var p = new Product?

Спасибо заранее.

ИЗМЕНИТЬ

Что я хочу сделать, так это иметь меню с <a href="#home"></a><a href="#products">products</a> и каждый раз создавать соответствующий объект из href.

4b9b3361

Ответ 1

Если вы знаете контекст, да. Скажем, вы находитесь в среде браузера, а Person - глобальный конструктор. Поскольку любая глобальная переменная является свойством глобального объекта, это означает, что вы можете получить доступ к Person через глобальный объект window:

var p = new Person()

Является эквивалентным:

var p = new window.Person()

Итак, вы можете использовать обозначение квадратной скобки:

var p = new window["Person"]();

Конечно, это справедливо для любого типа объекта. Если вы не хотите загрязнять глобальную область видимости, вы можете:

var mynamespace = {};

mynamespace.Person = function Person() {..}

var p = new mynamespace["Person"]();

Ответ 2

Ну, вы всегда можете использовать ужасно неуверенный и необоснованный eval(). например

var myStr = "Product"
var p = eval("new " + myStr + "()");

или это может быть:

var myStr = "Product"
eval("var p = new " + myStr + "()");

Но это чревато потенциальными уязвимостями, особенно если строка поступает с пользовательского ввода.

Ответ 3

Еще одна реализация:

var nameOfThang = 'Person';
var nameOfThingzName = 'The Dude';

var thangs = { Person: {name: 'Legowski'}, Cars: {} };
var person  = new (eval(thangs[nameOfThang].constructor))();
person.name = new (eval(thangs.Person.name.constructor))(nameOfThingzName) .toString();

console.log('@thang, #Person', person);