我有方法a(),方法b()方法c()..我將從服務器獲取響應消息,其中包含a或b或c等。 如果響應消息是a,那麼我需要調用方法a()。 Tf響應消息是b,那麼我需要調用方法b() .... 我不想寫任何其他條件或開關情況來確定方法。如何調用基於變量值的javascript方法
我不想這樣做。
if(res =='a')
a();
else if(res =='b')
b();
取而代之的是我需要類似java中的反射。
我有方法a(),方法b()方法c()..我將從服務器獲取響應消息,其中包含a或b或c等。 如果響應消息是a,那麼我需要調用方法a()。 Tf響應消息是b,那麼我需要調用方法b() .... 我不想寫任何其他條件或開關情況來確定方法。如何調用基於變量值的javascript方法
我不想這樣做。
if(res =='a')
a();
else if(res =='b')
b();
取而代之的是我需要類似java中的反射。
如果您已經在全球/窗範圍內定義的函數,那麼你可以直接使用res
變量
window[res]();
否則在對象定義的函數,然後用它
var obj = {
a : function(){},
b : function(){}
}
obj[res]();
你可以使用一個對象和存儲功能,如
var functions = {
a: function() {},
b: function() {},
c: function() {}
default: function() {} // fall back
}
美國GE:
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);
非常感謝。工作正常。 – Prasath