有没有一种在js中动态调用方法的好方法?

时间:2017-05-11 22:50:40

标签: javascript

我有2个js函数:

function onRegionMouseOver()
{
}

function onRegionMouseOut()
{
}

是否可以动态调用这些js函数做这样的事情?:

var type = 'Out'
//the following line would exec onRegionMouseOut() above:
call(onRegionMouse[type]())

4 个答案:

答案 0 :(得分:4)

您可以使用:

var onRegionMouseHandlers = {
  out: function () {},
  in: function () {}
}

// and using like this
var whatToUse = 'in';
// use
onRegionMouseHandlers[whatToUse]()

此外,您可以删除哪个选择要调用的函数。您可以在两个不同的事件中添加两个处理程序。

答案 1 :(得分:2)

您可以将函数定义为对象的属性,使用括号表示法来调用函数。

const methods = {
  onRegionMouseOver() {console.log("Over")},
  onRegionMouseOut() {console.log("Out")}
}

let fn = "onRegionMouse";

let type = "Out";

methods[`${fn}${type}`]();

type = "Over";

methods[`${fn}${type}`]();

没有模板文字或let

var methods = {
  onRegionMouseOver: function onRegionMouseOver() {console.log("Over")},
  onRegionMouseOut: function onRegionMouseOu() {console.log("Out")}
}

var fn = "onRegionMouse";

var type = "Out";

methods[fn + type]();

type = "Over";

methods[fn + type]();

答案 2 :(得分:0)

如果你声明一个包含这些函数的对象,你可以这样做。

var onRegionMouse = {
   Out: onRegionMouseOut,
   Over: onRegionMouseOver
};

现在你可以做到

var type = 'Out';
onRegionMouse[type]();

答案 3 :(得分:0)

怎么样:

var myFunctions = {
   out: function onMouseOut()...,
   enter: function onMouseEnter()...
}

您现在可以使用myFunctions [" out" ]()