【问题标题】:access functions outside the class in javascript在javascript中访问类外的函数
【发布时间】:2012-10-04 18:26:53
【问题描述】:

我的班级结构是这样的:

var jpTWUI = function(id, connection){
    this.id = id;
    this.muteButton = "#mute";
    this.hangupButton = "#hang";
    this.transferButton = "#trans";
    this.parentElement = jQuery('#timerCon');
    this.connection = connection;

    this.interval = "";

    this.createElements();
    this.addEvents(); 
};

jpTWUI.prototype = { 
    createElements: function(){ ... }, 
    addEvents: function(){...}, 
    startTimer: function(){...}
}

现在我已经创建了一个对象并像这样调用类

var callHandler = new jpTWUI('timerCon', connection);
callHandler.startTimer();

但问题是startTimer 方法具有setInterval 函数,它以分钟和秒为单位显示持续时间。

我想实现另一种方法,例如 stopTimer,它停止 startTimer 的间隔,我知道我必须使用用户 window.clearInterval。但是当我在同一个类中实现函数stopTimer 时,我不知道如何使用类访问该方法,例如:

var callHandler = new jpTWUI('timerCon', device);
callHandler.stopTimer();

希望你们理解我想要实现的目标,这是我第一次在 javascript 中使用该类..

请指导我这种方法是否正确? 或者我如何使它正确..

【问题讨论】:

  • 你应该在创建计时器时在变量中获取它的 id,并将其传递给 clear 函数
  • @AshokRaj 我进入了变量this.interval = setInterval(function(){..}, 1000),但我不知道如何将 this.interval 访问到 stopTimer()..

标签: javascript jquery oop


【解决方案1】:

修改后的代码。将 setInterval 的返回值保存在 setIntervalConst 中并使用它 clearInterval。 您应该在调用 startTimer 和 stopTimer 时使用相同的 jpTWUI 实例。

var callHandler = new jpTWUI('timerCon', connection);
callHandler.startTimer();

///var callHandler = new jpTWUI('timerCon', device); // remove this line if you want access same instance of jpTWUI.
callHandler.stopTimer();

.

jpTWUI.prototype = { 
    createElements: function(){ ... }, 
    addEvents: function(){...}, 
    setIntervalConst: 0,
    startTimer: function(){ this.setIntervalConst = setInterval(....) ....},
    stoptTimer: function(){ clearInterval(this.setIntervalConst ); ....}
}

【讨论】:

  • 我可以用这样的东西吗?? var callHandler = new jpTWUI('timerCon', device); callHandler.startTimer();var callHandler = new jpTWUI('timerCon', device); callHandler.stopTimer();
  • 是的,你可以。你在重新创建 jpTWUI 对象吗?你应该只初始化 callHandler 一次。
  • 我可以做这样的事情var callHandler = new jpTWUI('timerCon', device); 并分别调用方法,比如在我想调用callHandler.startTimer(); 的情况下,在第二种情况下我想调用callHandler.stopTimer(); 这可能吗??
【解决方案2】:

创建时获取id并清除。

this.interval = setInterval(function(){..}, 1000)
clearInterval(this.interval );

这对你的问题有帮助吗?

【讨论】:

    【解决方案3】:

    setInterval 返回一个标识符,您可以将其传递给clearInterval 以停止计时器,因此您可以执行以下操作:

    jpTWUI.prototype = { 
        …
        startTimer: function(){
            this.timer = setInterval(function(){
                console.log("interval")
            },2000) // every 2 seconds
        },
        stopTimer: function(){
            if(this.timer){
                clearInterval(this.timer);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2011-11-23
      • 2015-03-29
      • 2013-04-24
      相关资源
      最近更新 更多