繁体   English   中英

如何根据变量值调用javascript方法

[英]How do I call a javascript method based on variable value

我有方法a(),方法b()方法c().. 我将从服务器获取响应消息,其中包含a或b或c等。 如果响应消息是a ,那么我需要调用方法a() Tf响应消息是b ,那么我需要调用方法b() ....我不想写任何if else条件或switch case来识别方法。

我不想这样做。

if(res =='a')
   a();
else if(res =='b')
   b();

而不是我需要像java中的反射之类的东西。

如果已在Global / window Scope中定义了该函数,则可以直接使用res变量

window[res]();

否则在object中定义函数然后使用它

var obj = {
    a : function(){},
    b : function(){}
}   
obj[res]();

你可以使用一个对象并将函数存储在里面,比如

var functions = {
    a: function () {},
    b: function () {},
    c: function () {}
    default: function () {} // fall back
}

用法:

functions[res]();

或者默认

(functions[res] || functions.default)();

为此,您可以定义一个类,允许您定义和调用方法,并确定调用上下文:

var MethodsWorker = function () {
    this._context = window;
    this._methods = {};
}

MethodsWorker.prototype.setContext = function (context) {
    this._context = context;
}

MethodsWorker.prototype.defineMethod = function (name, method) {
    this._methods[name] = method;
};

MethodsWorker.prototype.invoke = function (methodName, args) {
    var method = this._methods[methodName];
    if (!method) { throw {}; }
    return method.apply(this._context, args);
};

用法:

var methodsWorker = new MethodsWorker ();
methodsWorker.setContext(Math);
methodsWorker.defineMethod('sqrtOfSum', function() {
    var sum = 0;
    for (var i = 0, n = arguments.length; i < n; i++) {
        sum += arguments[i];
    }
    return this.sqrt(sum);
});
var result = methodsWorker.invoke('sqrtOfSum', [1, 2, 3]);
alert (result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM