【问题标题】:how pass a prototype function and use in javascript如何传递原型函数并在 javascript 中使用
【发布时间】:2013-03-05 09:47:44
【问题描述】:

我有一个Graph 类,我想将它的原型函数传递给另一个函数。这是该类的一个小sn-p代码

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);

但是,我不知道该怎么做。有什么帮助吗?

【问题讨论】:

    标签: javascript parameter-passing prototype function-parameter


    【解决方案1】:

    如果你想使用函数作为参数,你可以这样传递:

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

    这将在所有对象中调用您的函数,但不带任何参数。我认为您可以针对任何参数修改此函数。

    【讨论】:

    • 谢谢。我不知道 apply 有这个功能。
    【解决方案2】:

    如果您已经有一个图表数组,则无需传递该函数。

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

    【讨论】:

    • 我知道,但我确实有很多函数,比如stopAnimation。例如,startAnimationresetAnimationresetGraph。因此,我需要以通用的方式进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多