有段时间没关注这个问题了,现在回头看了看,觉得问题问的不太对劲。那我重新改一下:
如题,在同一个上下文中,怎样动态执行函数?
举个栗子:
var abc = function(){...}
abc();
当这个abc
是动态获得的情况下,比如想实现这种需求:
var funName = 'abc';
xx[funName]();
看到这里,各位看官应该懂我的意思了。只不过这里的xx
,能换成什么呢。
之前问的问题很不恰当,这个跟上下文没啥关系,其实就是当前作用域
window['abc']();假如context
是window
环境当然这是可以的啦,但假如不是呢?this['abc']
获取不到
想在网上搜都不知道该怎么组织关键字。。
觉得这问题好经典,真想给自己加个精(当然,如果有。。)
来吧各位大神,求教育
又过了很长时间,回头看到了我发的这个问题。
想了下,我擦,其实很好解决啊,既然我想要这样获取xx[funName]();
,那xx
就做成个map
呗:
var xx = {
'abc': function() {}
};
想想就乐了。。。我当时咋想的。。。
哦,好吧,好像想起来咋想的了,我其实当时想要的是,有没有不需要自己维护的方式直接获取当前域下的所有变量集合。
不过应该是没有的。
结贴
var anonyCall = function(name) {
var calleeList = new function() {
this.hi= function(who) {
console.log('this is hi, how do you do ', who);
};
this.add = function(m, n) {
return m + n;
};
}();
try {
return calleeList[name].apply(calleeList, [].slice.call(arguments, 1));
} catch(e) {
throw 'function not found: ' + name;
}
};
anonyCall('hi', 'Bob');
console.log(anonyCall('add', 3, 5));
anonyCall('unknown');