如何在不使用 eval() 的情况下从字符串运行 JavaScript 对象
how to run javascript object from string without using eval()
我有一个具有项目类型和ID的json对象,我需要创建新对象
var data = {
"items":[
{"type":"generator","id":"item_1","x":200,"y":200},
{"type":"battery","id":"item_2","x":50,"y":300},
{"type":"generator","id":"item_3","x":200,"y":280},
{"type":"battery","id":"item_4","x":100,"y":400}
]
};
我需要为项目中的每个项目运行
jQuery.each(data.items, function(index,value) {
eval("var " + value.id + " = new " + value.type + "(" + (index + 1) + ");");
eval(value.id + ".id = '" + value.id + "';");
eval(value.id + ".draw(" + value.x + "," + value.y + ");")
});
这不是一个好的做法,但我还能做什么?
然后我需要控制项目
类似的东西
item_1.moveto(300,700);
但我总是得到item_1是找不到的
您可以创建一个工厂方法,该方法允许从抽象数据结构中生成具体类型:
var createItem = (function () {
var types = {};
function createItem(index, data) {
data = data || {};
var ctor = types[data.type], item;
if (!ctor) throw new Error("'" + data.type + "' is not a registered item type.");
item = new ctor(index);
item.id = data.id;
return item;
}
createItem.registerType = function (type, ctor) {
types[type] = ctor;
};
return createItem;
})();
然后将项目类型注册到工厂:
function Generator(index) {/*...*/}
createItem.registerType('generator', Generator);
最后创建一个对象映射以按 id 查找您的项目(您可以使用像 ItemsMap 这样的专用对象而不是普通对象),循环访问您的项目并将它们添加到地图中。
var itemsMap = {};
data.items.forEach(function (itemData, i) {
var item = itemsMap[itemData.id] = createItem(i + 1, itemData);
//you can also draw them at this point
item.draw(itemData.x, itemData.y);
});
您现在可以按 id 查找对象,如下所示:
var item1 = itemsMap['item_1'];
var objects = {};
objects[value.id] = new window[value.type](index + 1);
相关文章:
- 如何在不创建格式错误的HTML标记的情况下分解字符串
- 如何在不打断标记的情况下突出显示html字符串中的文本
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- 如何通过JS在不干扰其标记的情况下更改HTML文档中字符串的所有实例
- Javascript alert()在没有const字符串的情况下不显示
- 在这种情况下,如何将字符串添加到函数中 php
- 在不更改 HTML 的情况下操作 HTML 字符串的内容
- 限制字符串中显示的字符数,但在没有php的情况下以模态显示同一字符串中的所有字符
- 通过位置栏更改查询字符串,AJAX加载的菜单不会't在没有硬刷新的情况下重新填充
- 在保持字符串同等有效的情况下对其进行视觉加扰
- 如何在没有javascript中的split函数的情况下将字符串拆分为单词
- 在这种情况下,我如何在jquery中将字符串放入php中
- 在不渲染的情况下计算字符串大小
- 在不使用HTML的情况下对字符串中的换行符进行编码
- jQuery:在没有字符串选择器的情况下分离
- 在不使用AJAX的情况下将JSON字符串发送到php文件
- 如何在没有查询字符串和参数的情况下加载jQuery
- 在没有科学记数法的情况下将大数字转换为字符串
- 在 JavaScript 中给定时区字符串的情况下计算 UTC 偏移量