如何循环函数数组并一次执行一个函数

时间:2015-02-02 12:31:17

标签: javascript jquery html arrays function

var index=0;

function canvasp() { 

    var array_of_functions = [canvaspoint,canvaspoint1];
    array_of_functions[index++]('a string'); 

}


<button onclick="canvasp()">Next</button>

这里在这段代码中,我创建了一个包含两个函数的数组,并在onclick上增加数组..单击第一个函数执行的按钮,如果再次单击,第二个函数执行但仍然是第一个函数的操作仍然是...需要只有一个函数可以执行点击并增加到第二个隐藏第一个..我尝试使用for循环但不工作可以任何人帮助

这个小提琴http://jsfiddle.net/karthikchandran/hrvs4fzd/1/

1 个答案:

答案 0 :(得分:0)

如果您想要后续点击撤消上一个功能的效果,您需要一个知道如何操作的功能。最简单的方法是将它包含在您的数组中(您应该将移动到 canvasp函数,顺便提一下):

var index=0;
var array_of_functions = [
    canvaspoint,
    function(str) {
        undoCanvasPoint(str/* if needed */);
        canvaspoint1(str);
   }
];

function canvasp() { 

    if (index < array_of_functions.length) {
        array_of_functions[index++]('a string');
    }
}

更复杂的解决方案是具有doundo属性的对象数组,并使用预增量而不是后增量:

var index=-1;
var array_of_functions = [
    {
        "do": canvaspoint,
        "undo": undoCanvaspoint
    },
    {
        "do": canvaspoint1,
        "undo": undoCanvaspoint1
   }
];

function canvasp() { 
    if (index >= 0) {
        array_of_functions[index]["undo"]('a string if needed');
    }
    ++index;
    if (index < array_of_functions.length) {
        array_of_functions[index++]["do"]('a string');
    }
}

旁注:我将do放在引号中以便对较旧的JavaScript引擎友好;当前引擎符合当前规范,关键字作为属性名称没有问题,只要它们是明确的属性名称。 (然后我为undo做同样的事情只是为了保持一致。)