我的要求是在相变上,我必须构造方法名称,并调用方法和后续方法,在这里我可以构造方法名称,但它是字符串,不能调用方法。我遵循了一些给出的建议,但我无法实现。请帮帮忙。
var previousPhase = $("#currentPhase").val();
var projectPhaseArray = ["requirement", "design", "construction", "testing", "release"];
var i = 0;
$("#currentPhase").change(function() {
alert(previousPhase);
i=projectPhaseArray.indexOf(previousPhase);
for (i; i < projectPhaseArray.length; i++) {
alert(projectPhaseArray[i]);
var phaseTimeLineToCall =
projectPhaseArray[i].concat("PhasePhaseTimeLines");
executeFunctionByName(phaseTimeLineToCall,window);
}
});
function executeFunctionByName(functionName, context /*, args */) {
return context[functionName].apply(context);
}
function requirementPhaseTimeLines(){
alert("In RequirementPhaseTimelines");
}
function designPhaseTimeLines(){
alert("In DesignPhaseTimelines");
}谢谢。
发布于 2018-03-12 14:47:03
字符串不会改变,因此需要将该值保存回去
projectPhaseArray[i] = projectPhaseArray[i].concat("PhasePhaseTimeLines");发布于 2018-03-12 15:05:39
您可以使用javascript对象,其中将函数名存储为key,将函数引用存储为value
var lookup = {
requirementPhaseTimeLines: requirementPhaseTimeLines,
designPhaseTimeLines: designPhaseTimeLines
}不带参数
我们必须稍微修改一下executeFunctionByName
function executeFunctionByName(functionName, lookup) {
return lookup[functionName]()
}工作示例
function requirementPhaseTimeLines() {
return "In RequirementPhaseTimelines"
}
function designPhaseTimeLines() {
return "In DesignPhaseTimelines"
}
var lookup = {
requirementPhaseTimeLines: requirementPhaseTimeLines,
designPhaseTimeLines: designPhaseTimeLines
}
function executeFunctionByName(functionName, lookup) {
return lookup[functionName]()
}
console.log(
executeFunctionByName("requirementPhaseTimeLines", functions)
)
console.log(
executeFunctionByName("designPhaseTimeLines", functions)
)
带参数
如果我们想要传递参数,我们必须对我们想要执行的函数执行curry。
function greet(word) {
return function(name) {
return word + ', ' + name + '.'
}
}其次,我们必须创建一个函数,在这个函数中我们可以遍历参数,并将每个参数值设置为我们想要执行的函数:
function setArguments(functionRef, args) {
return args.length === 1
? functionRef
: setArguments(functionRef(args[0]), args.slice(1))
}工作示例
function greet(word) {
return function(name) {
return word + ', ' + name + '.'
}
}
var lookup = {
greet: greet
}
function getFunction(lookup, name) {
return lookup[name] || new Function()
}
function setArguments(functionRef, args) {
return args.length === 1
? functionRef
: setArguments(functionRef(args[0]), args.slice(1))
}
function executeFunctionByName(functionName, lookup, args) {
var functionRef = getFunction(lookup, functionName)
var functionRefWithArgs = setArguments(functionRef, args)
return functionRefWithArgs(args[args.length - 1])
}
console.log(
executeFunctionByName('greet', lookup, ['Hi', 'Jon'])
)
https://stackoverflow.com/questions/49229448
复制相似问题