我想在javascript中创建一个新对象(使用简单继承),以便从变量中定义对象的类:
var class = 'Person';
var inst = new class
任何想法?
答案 0 :(得分:29)
您可以执行类似
的操作function Person(){};
var name = 'Person';
var inst = new this[name]
关键是引用拥有构造函数的对象。这在全局范围内工作正常,但是如果要将代码转储到函数内部,则可能必须更改引用,因为this
可能不起作用。
编辑:传递参数:
function Person(name){alert(name)};
var name = 'Person';
var inst = new this[name]('john')
答案 1 :(得分:8)
我是这样做的。与meder的答案类似。
var className = 'Person'
// here's the trick: get a reference to the class object itself
// (I've assumed the class is defined in global scope)
var myclass = window[className];
// now you have a reference to the object, the new keyword will work:
var inst = new myclass('params','if','you','need','them');
答案 2 :(得分:0)
通过meder改进上述答案:
使用函数调用:
您只需将'this'替换为包含您所引用的类的范围,例如,如果该类是在全局范围内编写的,如下所示:
function Person(name){alert(name)};
var name = 'Person';
function classMaker(){
var inst = new window[name]('john');
}
classMaker();
答案 3 :(得分:-1)
我在Node.js中遇到类似的问题,因为我必须根据数据动态创建不同的处理程序对象。首先,我在一个对象中收集了所有可用的处理程序,这些处理程序在单个模块中实现。在一个简单的例子中,这可以像这样硬编码。
var handlers = {
handlerX : require('HandlerX'),
handlerY : require('HandlerY')
};
然后,每当我必须实例化一个处理程序时,我就这样做了:
var handlername = getHandlerName()
var handler = new handlers[handlername]();
当然,这只有在你知道或者能够以编程方式确定你需要创建的所有对象的列表时才有效。
答案 4 :(得分:-3)
当我在javascript中使用不同的继承模式时,这个演讲非常有用。示例代码包含在第二个链接中(视频介绍了它)。