如何在对象名的基础上创建javascript对象的实例
我有3个js文件 object.js包含以下对象如何在对象名的基础上创建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中添加任何对
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]()