是否可以使用字符串创建新对象?
例如,如何将字符串“product”转换为var p = new Product
?
提前致谢。
修改
我想要的是拥有一个带<a href="#home"></a><a href="#products">products</a>
的菜单,并且每次都从href创建相应的对象。
答案 0 :(得分:65)
如果你知道背景,是的。假设您处于浏览器环境中,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"]();
答案 1 :(得分:7)
嗯,你总是可以使用可怕的不安全和illadvised eval()。 例如
var myStr = "Product"
var p = eval("new " + myStr + "()");
或者可能是:
var myStr = "Product"
eval("var p = new " + myStr + "()");
但它充满了潜在的漏洞,特别是如果字符串来自用户输入。
答案 2 :(得分:1)
只是另一种实现:
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);