Создать объект из строки
Можно ли создать новый объект с помощью строки?
Например, как преобразовать строку "продукт" в var p = new Product
?
Спасибо заранее.
ИЗМЕНИТЬ
Что я хочу сделать, так это иметь меню с <a href="#home"></a><a href="#products">products</a>
и каждый раз создавать соответствующий объект из href.
Ответы
Ответ 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);