Javascript从字符串中的类名创建新对象
Javascript create new object from class name in string
我有一点不起作用的代码:
PackageLoader.prototype.activate = function(name) {
this.activePackages.push(new name());
}
我想做的是将一个新实例推送到activePackages数组,如果它得到的名称是字符串的话。如何做到这一点?
如果name
没有引用全局范围中的"类",则可以安全地使用eval
:
function toConstructor(className) {
if (!/^[$_a-z][$_a-z0-9.]*$/i.test(className)) {
throw new Error("Invalid class name: " + className);
}
try {
return eval(className);
}
catch (error) {
return null;
}
}
使用它:
var Foo = {
Bar: {
Baz: function() {}
}
};
var Klass1 = toConstructor("XMLHttpRequest");
var xhr = new Klass1();
xhr.onreadystatechange = function() {};
var Klass2 = toConstructor("Foo.Bar.Baz");
var baz = new Klass2(3);
console.log(baz.x); // logs 3
var Klass3 = toConstructor("I.Do.Not.Exist");
console.log(Klass3); // logs NULL
如果在全局范围中,请使用括号表示法
this.activePackages.push(new window[name]());
相关文章:
- javascript处理一个对象数组以获得一个新的对象数组
- 返回带有筛选结果的新JSON对象
- 新Javascript对象的可选初始化属性
- Kinetic.js旋转组对象的新子对象具有不正确的偏移
- 嵌入多对多关系-如果一个新对象还不存在,则添加一个新的对象
- Jquery新元素在连接时导致[对象对象]
- 传递 JavaScript 函数以在新窗口对象中运行
- 单击新 DOM 对象时的操作
- 使用 JavaScript 比较 2 个数组并创建一个新的对象数组,该数组不包含与 id 字段匹配的对象
- 使用对象方法实例化新的对象 JavaScript
- 如何在使用 outerHTML 更改内容后获取对新 DOM 对象的引用
- 如何将两个 JS 数组连接到一个新的对象数组作为键:值
- 来自String的Javascript新Date对象,IE和FF上的不同结果
- 创建新日期对象时不一致
- 将对象的值推送到新的对象数组中
- 为 AJAX 数据添加新的对象值
- 无法使用新数据对象更新Knockout UI
- 通过比较和推送唯一对象来创建新的对象数组
- 如何在javascript中添加新的对象类型
- 我如何过滤对象并获得一个新的对象