从一个变量对象中执行一个函数
问题描述:
假设我有一个包含我想运行的函数名称的变量,我可以使用window
来运行它,就像这样;从一个变量对象中执行一个函数
var func = "myFunc",
myFunc = function(){ ... };
window[func](); // run the function in the func var
但是,如果预期的功能深入对象内部,则不起作用;
var obj = {
foo: {
hey: function(){ ... }
}
};
obj.foo.hey(); // this runs
var func = "obj.foo.hey";
window[func](); // this doesn't
我可以使用eval()
,但我不知道它是否能够避免,从而不会引入许多安全考虑,eval()
自带。
如何在函数处于如上所述的对象中时运行变量中指定的函数?
答
你可以遍历拆分func
并返回一个walked对象的结果。
function getValue(object, path) {
return path.split('.').reduce(function (o, k) {
return (o || {})[k];
}, object);
}
var obj = { foo: { hey: function() { console.log('hey'); } } },
func = "obj.foo.hey";
getValue(window, func)();
(getValue(window, 'bar') || function() {})(); // default function, prevent exception
答
可以的传球嵌套一个字符串下的性能。它必须像动态一样完成。
var obj = {
foo: {
hey: function(){console.log("i run")}
}
};
obj.foo.hey(); // this runs
var route = ["obj","foo","hey"],
func = route.reduce((f,r) => f[r], window);
func()
http://*.com/questions/1184123/is-it-possible-to-add-dynamically-named-properties-to-javascript-object – Teemu