如何在对象名的基础上创建javascript对象的实例

如何在对象名的基础上创建javascript对象的实例,javascript,object,Javascript,Object,我有3个js文件 object.js包含以下对象 function User() { //Some property } function Employee() { // Some Property } 。。等等 还有Framework.js,我们需要在其中创建一个方法CreateInstance(objectname) 我们需要以这样一种方式创建此方法,即使用createinstance方法的人只需要传递他需要的实例的objectname。因此,将来如果在object.js中添加任何对

我有3个js文件

object.js包含以下对象

function User()
{
 //Some property
}

function Employee()
{
 // Some Property
}
。。等等

还有Framework.js,我们需要在其中创建一个方法CreateInstance(objectname)

我们需要以这样一种方式创建此方法,即使用createinstance方法的人只需要传递他需要的实例的objectname。因此,将来如果在object.js中添加任何对象,createinstance应该能够基于ObjectName创建该对象的实例,而无需修改createinstance方法

function CreateInstance(objectName)
  {
  //logic for creating instance of object.
  }

有可能吗?怎么可能?

为什么不直接使用
新的
操作符呢?您当前可以这样使用它:

var user = new User();

alert(user instanceof User); // Shows "true"

为什么不直接使用
new
操作符呢?您当前可以这样使用它:

var user = new User();

alert(user instanceof User); // Shows "true"

一次合法使用
eval

function CreateInstance(objectName) {
  return new (eval(objectName))();
}

如果希望安全,可以添加一些验证,以确保
objectName
是一个单词,而
eval(objectName)
是一个函数

一次合法使用
eval

function CreateInstance(objectName) {
  return new (eval(objectName))();
}

如果希望安全,可以添加一些验证,以确保
objectName
是一个单词,而
eval(objectName)
是一个函数

如果您想通过提供字符串创建实例(我就是这样解释您的问题的),您可以始终使用
eval

function CreateInstance(objectName) {
    return eval("new " + objectName + "()");
}

如果您想通过提供字符串创建实例(我就是这样解释您的问题的),您可以始终使用
eval

function CreateInstance(objectName) {
    return eval("new " + objectName + "()");
}

只要在窗口范围内定义了用户和员工,以下各项就可以工作:

function CreateInstance(objectName)
{
    if (typeof window[objectName] == 'function') {
        return new window[name];
    }

    // return null or throw an error ...
}

var user = CreateInstance('User');
console.log(user instanceof User); // true

var employee = CreateInstance('Employee');
console.log(employee instanceof Employee); // true

只要在窗口范围内定义了用户和员工,以下各项就可以工作:

function CreateInstance(objectName)
{
    if (typeof window[objectName] == 'function') {
        return new window[name];
    }

    // return null or throw an error ...
}

var user = CreateInstance('User');
console.log(user instanceof User); // true

var employee = CreateInstance('Employee');
console.log(employee instanceof Employee); // true

我想你们是在尝试工厂模式。 做这件事有不同的方法。但根据上面的陈述,你似乎有点做错了

Javascript是一种基于函数的语言,其中函数表示对象本身(换句话说,是类结构)

编写函数后,您已经创建了一个对象。

始终可以使用new关键字创建对象


直接使用新关键字的原因是“它是一个全局考虑的语言”。也就是说,如果对象在系统内的任何时间引用,您可以从任何位置全局访问该对象

我认为您正在尝试使用类似工厂模式的东西。 做这件事有不同的方法。但根据上面的陈述,你似乎有点做错了

Javascript是一种基于函数的语言,其中函数表示对象本身(换句话说,是类结构)

编写函数后,您已经创建了一个对象。

始终可以使用new关键字创建对象

直接使用新关键字的原因是“它是一个全局考虑的语言”。也就是说,如果对象在系统中随时引用,您可以从任何位置全局访问该对象

您不需要(也不应该使用)
eval

var myconstructors = {
    User: function(){/*...*/},
    Employee: function(){/*...*/}
};

var createinstance = function(name){
    return new myconstructors[name]();
};
对此,您不需要(也不应该使用)
eval

var myconstructors = {
    User: function(){/*...*/},
    Employee: function(){/*...*/}
};

var createinstance = function(name){
    return new myconstructors[name]();
};

谢谢……但这并不能解决我的问题。我需要创建“ObjectName”的实例。谢谢。但这并不能解决我的问题。我需要创建“ObjectName”的实例。
新窗口[ObjectName]()
新窗口[ObjectName]()