2013-07-07 134 views
0

我有3个js文件。如何基于对象名称创建javascript对象的实例

object.js以下对象constains,

function User() 
{ 
//Some property 
} 

function Employee() 
{ 
// Some Property 
} 

..等等

和有Framework.js中,我们需要创建一个方法CreateInstance(对象名)。

我们需要在这样一种方式,一个谁将会使用CreateInstance方法将只需要传递对象名,其情况下,他需要创建此方法。因此,将来如果在object.js中添加任何对象,则createinstance应该能够基于ObjectName创建该对象的实例,而无需修改CreateInstance方法。

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

它可能和如何?

+1

'new window [objectName]()' –

回答

1

如果你想通过提供字符串(这是我如何理解你的问题)来创建一个实例,你可以随时使用eval

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

谢谢..这解决了我的问题 –

0

你为什么不只是使用new操作?你可以使用目前这样的:

var user = new User(); 

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

谢谢......但这并不能解决我的问题。我需要创建“ObjectName”的实例。 –

1

一个legitemate使用eval

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

您可以添加一些验证,以确保objectName是一个词,eval(objectName)是一个功能,如果你想成为安全的。

1

下,只要将正常运行用户和员工在定义窗口范围:

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 
0

我想你正在尝试拥有像工厂模式。 有不同的做法。但根据上述说法,看起来你有点不对。

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

一旦你写了一个函数,你已经创建了一个对象。

您可以随时使用new关键字创建对象。

原因直接使用new关键字是“它是一种全球考虑郎”。即你可以在全球任何地方,如果它的系统

0

你不需要(且不应使用)eval此范围内随时refered访问对象。

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

var createinstance = function(name){ 
    return new myconstructors[name](); 
}; 
相关问题