Javascript 从字符串调用函数的正确方法是什么?
是否可以执行以下操作:Javascript 从字符串调用函数的正确方法是什么?,javascript,Javascript,是否可以执行以下操作: // Response from an API as a string, that contains a function to call. const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})'; function myFunc(obj) { console.log(obj); } function callBack(stringFn) { return Functi
// Response from an API as a string, that contains a function to call.
const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';
function myFunc(obj) {
console.log(obj);
}
function callBack(stringFn) {
return Function.prototype.call(stringFn);
}
callBack(stringFunc);
控制台日志:
{"Status":200,"Message":"This is a message"}
它似乎工作得很好,但想知道这是否是正确的方式进行这一切?是否有更好的方法或不可预见的影响
感谢使用方法
const stringFunc='myFunc({“Status”:200,“Message”:“This is a Message”});
函数myFunc(obj){
控制台日志(obj);
}
函数回调(stringFn){
返回函数.prototype.call(stringFn);
}
eval(stringFunc);
使用方法
const stringFunc='myFunc({“Status”:200,“Message”:“This is a Message”});
函数myFunc(obj){
控制台日志(obj);
}
函数回调(stringFn){
返回函数.prototype.call(stringFn);
}
eval(stringFunc);
作为eval
的替代方法,您可以使用函数
构造函数:
const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';
function myFunc(obj) {
console.log(obj);
}
const payloadFunc = new Function(stringFunc);
payloadFunc() //logs the object
作为
eval
的替代方法,您可以使用函数
构造函数:
const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';
function myFunc(obj) {
console.log(obj);
}
const payloadFunc = new Function(stringFunc);
payloadFunc() //logs the object
看起来您也可以使用eval调用函数:看起来您也可以使用eval调用函数:但是为什么您仍然有callback()函数?如果使用eval()则不需要,对吗?如果您打算调用myFunc Only,则不需要回调注意,使用eval()或使用任何其他方式从字符串执行代码是一个严重的安全问题。当字符串来自不受信任的源时,攻击者可以在网页上下文中执行任何操作。你不应该这样做。但是为什么你仍然有callback()函数呢?如果使用eval()则不需要,对吗?如果您打算调用myFunc Only,则不需要回调注意,使用eval()或使用任何其他方式从字符串执行代码是一个严重的安全问题。当字符串来自不受信任的源时,攻击者可以在网页上下文中执行任何操作。你不应该那样做。