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

时间:2013-07-07 10:09:06

标签: javascript object

我有3个js文件。

object.js constains跟随对象,

function User()
{
 //Some property
}

function Employee()
{
 // Some Property
}

..等等。

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

我们需要以这样的方式创建此方法:使用createinstance方法的人只需要传递其所需实例的objectname。因此,将来如果在object.js中添加了任何对象,createinstance应该能够在不修改CreateInstance方法的情况下基于ObjectName创建该对象的实例。

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

可能吗?如何?

6 个答案:

答案 0 :(得分:1)

使用eval的一位有条不紊的人。

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

如果您想要安全,可以添加一些验证以确保objectName是一个单词并且eval(objectName)是一个函数。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

只要在窗口范围内定义了User和Employee,就可以使用以下命令:

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

答案 3 :(得分:0)

为什么不使用new运算符?您可以使用目前这样的:

var user = new User();

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

答案 4 :(得分:0)

我认为你正试图拥有像Factory Pattern这样的东西。 有不同的方法可以做到这一点。但是根据上面给出的陈述,你似乎有点不对劲。

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

  

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

您始终可以使用新关键字创建对象。

直接使用新关键字的原因是“它是全球性的考虑因素”。即如果它在系统内的任何时间提到,你可以从任何地方全局访问一个对象

答案 5 :(得分:0)

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

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

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