从字符串创建对象

chc*_*ist 23 javascript

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

提前致谢.

编辑

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

ZER*_*ER0 67

如果你知道背景,是的.假设您处于浏览器环境中并且Person是全局构造函数.因为任何全局变量都是全局对象的属性,所以它意味着您可以Person通过全局对象进行访问window:

var p = new Person()
Run Code Online (Sandbox Code Playgroud)

相当于:

var p = new window.Person()
Run Code Online (Sandbox Code Playgroud)

所以你可以使用方括号表示法:

var p = new window["Person"]();
Run Code Online (Sandbox Code Playgroud)

当然这对每种物体都有效.如果您不想污染全局范围,您可以:

var mynamespace = {};

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

var p = new mynamespace["Person"]();
Run Code Online (Sandbox Code Playgroud)

  • 这是比我的+1更好的解决方案 (5认同)

Mat*_*ows 7

那么你总是可以使用可怕的不安全和illadvised eval().例如

var myStr = "Product"
var p = eval("new " + myStr + "()");
Run Code Online (Sandbox Code Playgroud)

或者可能是:

var myStr = "Product"
eval("var p = new " + myStr + "()");
Run Code Online (Sandbox Code Playgroud)

但它充满了潜在的漏洞,特别是如果字符串来自用户输入.

  • 使用`name - >构造函数`映射可以更好地解决这个问题. (2认同)