Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实例化动态类_Javascript_Oop_Class - Fatal编程技术网

Javascript 实例化动态类

Javascript 实例化动态类,javascript,oop,class,Javascript,Oop,Class,在Javascript中,如何在不使用eval()和传入参数的情况下动态实例化新类?例如 假设我想创建一个新的CatViewController并传入“kitten”,我该如何做 var myClassname = "CatViewController"; var cat = new myClassname("kitten"); 它应决心: var cat = new CatViewController("kitten"); 谢谢 只要功能在范围内,您就可以执行以下操作: var cat =

在Javascript中,如何在不使用eval()和传入参数的情况下动态实例化新类?例如 假设我想创建一个新的CatViewController并传入“kitten”,我该如何做

var myClassname = "CatViewController";
var cat = new myClassname("kitten");
它应决心:

var cat = new CatViewController("kitten");

谢谢

只要功能在范围内,您就可以执行以下操作:

var cat = new this[myClassname]("kitten");
另一种类似的方式:

var classes = {
    A: function (arg) {

    },
    B: function (arg) {

    },
    C: function (arg) {

    }
};

var a = new classes["A"]("arg");

@Matthew-如果你参考了
窗口
范围,你应该很乐意去,对吗?只需使用
窗口
引用,而不是
this
关键字。似乎在为我工作。然而,我很好奇这种方法是否有任何缺点,因为我目前正在一个项目中使用它。基于您以前的演示。

只有当
this==window
且var在全局范围内时,这才有效。@Matthew-这不太正确。它实际上可以在任何范围内工作,但必须在所述范围内定义。如果您在另一个类中实例化它会怎么样!=窗口?此(已修复)显示它不工作。请注意,它不在全局范围内,并且(如问题中所述)未定义为
this.CatViewController=function(){}
。所以你会得到一个“非构造函数”错误。混乱:“……但它必须在所述范围内定义。”我要补充的是,它必须定义为该范围内的公共成员。如果使用
var
定义,则它将不起作用,除非范围是
window
。不幸的是,我们不知道它是如何定义的@Matthew:如果您将演示更改为使用
this.CatViewController=func…
它会工作的。问题中没有构造函数的定义。您需要说明构造函数是如何定义的,以及在何处定义的,以便@Chaos给出更精确的答案。他的一般例子大致说明了它的工作原理。