的JavaScript - 包含函数
问题描述:
通常的名称的字符串,如果我有包含函数的名称的字符串,我可以做类似...的JavaScript - 包含函数
window[functionName](arguments);
然而,在使用时无法正常工作“jQuery对象”风格的编程(或任何正确的术语)。例如;
(function ($) {
"use strict";
$.test = (function() {
var func1 = function() {
alert("func1");
};
var func2 = function() {
alert("func2");
};
return {
Test: function (functionName) {
var fn = window[functionName]; // Need to specify scope here, somehow
if (typeof fn === 'function') {
fn();
} else {
alert("fn() = " + fn);
}
}
}
}());
} (jQuery));
$.test.Test("func1");
$.test.Test("func2");
理想,这将显示FUNC1其次FUNC2 - 但显然作用域是错误的,我不知道如何表明它在这种情况下。
如何在这种情况下指定函数的范围?我当然可以使用eval(),但我试图避免这种情况...
谢谢。
答
使用对象映射到房子的功能来代替:
var funcs = {
func1: function() {
alert("func1");
},
func2: function() {
alert("func2");
}
};
return {
Test: function (functionName) {
var fn = funcs[functionName];
if (typeof fn === 'function') {
fn();
} else {
alert("fn() = " + fn);
}
}
};
+0
谢谢;后见之明,但我正在走错错误的范围胡同! – gdt 2013-03-29 15:59:15
@ AndyE的答案是正确的,但供大家参考,这“jQuery对象风格”没有一个*官方*项,而是一个使用立即调用的函数表达式创建的闭包(例如,词法作用域)的示例。 – Xophmeister 2013-03-28 11:17:38