我有一个变量,它的成员变量是一个函数
let test = {
setup: function() { ...}
}
从其他来源,我得到了字符串“ test.setup”
我如何检查
a。)变量测试存在
b。)变量测试有一个名为setup的子项
c。)子设置是功能吗?
d。)调用函数
我已经测试过
let variableName = "test.setup";
window[variableName]
// undefined
{}.toString.call(variableName ) === '[object Function]'
// VM2052:1 Uncaught SyntaxError: Unexpected token .
window.hasOwnProperty("test")
// false
如果您能解决我的问题,那就太好了。对我来说,看看是否有这样的函数就足够了,如果有的话就调用它。否则,通知用户没有此功能。
非常感谢您
答案 0 :(得分:1)
最简单,最不安全的方法是使用eval()
。永远不要对用户生成的数据使用eval()
,因为它是攻击媒介。
let test = { setup: function() { return "HelloWorld"; }
let x = eval("typeof test.setup");
console.log(typeof x); // prints function
console.log(x()); // prints "HelloWorld";
如果在未定义的变量上评估“ .setup”,则会出现错误。因此,您可以使用try/catch
来解决这个问题。
function exists(value) {
try {
return eval(value);
} catch(e) {
return undefined;
}
}
console.log(exists("typeof test.setup")); // prints a type if it exists, or undefined