Kir*_*irk 6 javascript json function object
我有一个对象的"库",我想从数据库中动态加载.每个对象都有自己的特殊函数,这些函数在特定时间根据对象类型调用.理想情况下,我希望能够做到这一点,虽然有人指出这不起作用:
library = {
"myObj" : {"name" : "myObj", "type" : "myType", "function" : function () { } } //, etc
}
Run Code Online (Sandbox Code Playgroud)
字符串"myObj"
在我的程序中传递了很多,但我只需要一次访问对象的某些值,并且在某些情况下需要运行特定的函数.问题是我正在查看数百个,最终成千上万个可能存在不同功能的潜在对象.
存储要像这样调用的函数的"正确"方法是什么.我知道在执行期间调用eval会非常不安全,从而实现xss攻击等等.我真的想避免大量的switch语句或额外函数的膨胀加载.我也希望解决方案尽可能简洁.
这可能不是第一次出现.; /
谢谢你的帮助.
在将其作为字符串加载后,只需使用eval重新创建该函数.因此,如果myObj
从JSON 反序列化对象,并且您有一个属性:
myObj = {
....
function: "function() { ... }"
}
Run Code Online (Sandbox Code Playgroud)
你可以很容易地把它变成一个真正的功能:
eval("myObj.func = " + myObj.func);
Run Code Online (Sandbox Code Playgroud)
哦 - 我不确定这是否是编辑或我以前错过了 - 但重新:eval.
Eval是一种工具.您希望将函数存储在数据库中.如果你必须"eval"把它变成代码,或者还有其他一些神奇的方法可以做到这一点,那真的没什么区别:如果有人可以改变数据库中的数据,那么他们就可以改变一个功能.
如果您需要存储函数,那么eval就是您的工具.它本质上并不"坏",它很糟糕,因为它容易被滥用.无论您使用得好还是由您自己决定.
请记住,客户端上运行的任何内容仍然只在客户端上运行.没有任何恶意的人可以使用eval,他们无法轻松地使用Chrome调试器.任何人都可以随时在客户端上运行他们想要的任何代码,由服务器来决定如何处理它收到的内容.首先,客户端没什么安全的......
归档时间: |
|
查看次数: |
8565 次 |
最近记录: |