创建从可变
问题描述:
新javascript对象我想创建(使用简单的继承)在JavaScript的新对象,使得该对象的类是从变量定义:创建从可变
var class = 'Person';
var inst = new class
任何想法?
答
你可以做这样的事情
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')
答
这里是我如何做到这一点。与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');
+0
非常有帮助。谢谢。这比Meder的答案要好,因为你可以将'className'作为参数传递给父函数,并且由于蕴涵方法而将它用于任何类。至少,我设定它的方式。 – BarryMode 2016-06-26 22:04:28
答
我在Node.js中有类似的问题,当我必须根据数据动态创建不同的处理程序对象时。首先,我将所有可用的处理程序(作为单独的模块实现)收集到一个对象中。在一个简单的情况下,这可以像这样硬编码。
var handlers = {
handlerX : require('HandlerX'),
handlerY : require('HandlerY')
};
然后,每当我不得不实例化一个处理程序,我这样做是这样的:
var handlername = getHandlerName()
var handler = new handlers[handlername]();
当然,如果你知道这只是工作,或以编程方式确定所有对象你会列表需要创建。
要调用使用功能:
答
要通过MEDER提高对答案上述
只需将包含您指的是类的范围替代“本”,例如,如果类是写在如下全球范围:
function Person(name){alert(name)};
var name = 'Person';
function classMaker(){
var inst = new window[name]('john');
}
classMaker();
+1非常好的meder – alex 2011-04-30 01:46:56
谢谢!我如何传递参数? – yee379 2011-04-30 01:48:21
你也可以使用'apply'来传递参数,如果你事先不知道这些参数,这很有用。 'this [name] .apply(null,args)'其中args是一个参数/参数数组。在动态调用函数时,往往会出现这种情况。 – 2011-04-30 13:19:30