从字符串创建对象

时间:2012-03-21 11:42:28

标签: javascript

是否可以使用字符串创建新对象? 例如,如何将字符串“product”转换为var p = new Product

提前致谢。

修改

我想要的是拥有一个带<a href="#home"></a><a href="#products">products</a>的菜单,并且每次都从href创建相应的对象。

3 个答案:

答案 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);