2

クラスがGraphあり、そのプロトタイプ関数を別の関数に渡したい。これがクラスの小さなスニペットコードです

function Graph(opts) {
    this.filled = opts.filled;
    this.max = opts.max || 50;
    this.min = opts.min || 0;
    this.fixed = 60; //px

    this.transitionArr = [];
    this.timeoutArr = [];
};

Graph.prototype.stopAnimation = function() {
    //stop any css3 transition by removing animation properties
    this.removeAnimProps();
    //stop if there is any timeout
    for (var i = 0; i < this.timeoutArr.length; i++) {
        clearTimeout(this.timeoutArr[i]);
    }

    for (var i = 0; i < this.transitionArr.length; i++) {
        this.transitionArr[i].stop();
    }
};

そして、私がやろうとしているのはstopAnimation、すべてのオブジェクトを反復処理してすべてのオブジェクトのすべてのアニメーションを停止する関数を渡すことです。

function iterateOverAll(userFunc){
    for (var i = 0; i < GraphArr.length; i++) {
        GraphArr[i].userFunc();
    }
}

iterateOverAll(Graph.prototype.stopAnimation);

しかし、どうすればいいのかわかりません。何か助けてください?

4

2 に答える 2

3

関数を引数として使用する場合は、次のように渡すことができます。

function iterateOverAll(callFunc){
    for (var i = 0; i < GraphArr.length; i++) {
        callFunc.apply(GraphArr[i],[]);
    }
}

iterateOverAll(Graph.prototype.stopAnimation);

これにより、すべてのオブジェクトで関数が呼び出されますが、引数はありません。この関数はどの引数でも変更できると思います。

于 2013-03-05T09:57:39.513 に答える
0

すでにグラフの配列がある場合は、関数を渡す必要はありません。

function iterateOverAll(){
    for (var i = 0; i < GraphArr.length; i++) {
        GraphArr[i].stopAnimation();
    }
}

iterateOverAll();
于 2013-03-05T09:51:08.163 に答える