大佬教程收集整理的这篇文章主要介绍了如何在JSON中存储JavaScript函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通常,这样的问题表示X / Y问题:您需要执行X,您认为Y会帮助您完成此操作,因此您尝试执行Y,不能执行,并询问如何执行Y。这通常会更多询问如何做X很有用。
但是回答以下问题:您
使用replacer和reviver函数将函数转换为字符串(在过程中Stringify
),然后再转换为函数(在过程中parse
),以存储函数的字符串版本,但是这样做存在各种问题,不仅如此,定义功能的范围可能对功能很重要。(与您在问题中显示的功能无关紧要,但是我认为这并没有真正的代表性。)并将字符串从本地存储转换为您可以运行的代码意味着您相信本地存储内容没有被恶意破坏。除非页面已经容易受到XSS攻击,否则这不可能,但这是一个需要牢记的问题。
这是一个示例,但是除非用尽其他选项,否则我不建议您这样做,尤其是因为它使用eval
,它(像它的近亲new Function
)可能是恶意代码的载体:
// The object
var obj = {
a: 5,
b: function (param) {
return param;
}
};
// Convert to JsON using a replacer function to output
// the String version of a function with /Function(
// in front and )/ at the end.
var Json = JsON.Stringify(obj, function(key, value) {
if (typeof value === "function") {
return "/Function(" + value.toString() + ")/";
}
return value;
});
// Convert to an object using a reviver function that
// recognizes the /Function(...)/ value and converts it
// into a function via -shudder- `eval`.
var obj2 = JsON.parse(Json, function(key, value) {
if (typeof value === "String" &&
value.startsWith("/Function(") &&
value.endsWith(")/")) {
value = value.subString(10, value.length - 2);
return (0, eval)("(" + value + ")");
}
return value;
});
document.body.INNERHTML = obj2.b(42);
该构造(0, eval)("(" + value +
")");
可确保eval
在全局范围而不是在齐磊函数范围内运行。通常,它eval
具有使用调用它的范围的魔术功能,但是仅在直接调用它时才有效。如图所示(或仅显示)的间接eval
var e = eval; e("(" + value + ")");
功能不具备这种魔术功能,它在全局范围内运行。
以上是大佬教程为你收集整理的如何在JSON中存储JavaScript函数全部内容,希望文章能够帮你解决如何在JSON中存储JavaScript函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。