调用每秒调用一个方法的方法

时间:2014-07-14 10:03:25

标签: javascript

http://jsfiddle.net/hRksW/

function test() {
    this.alerting = function () {
        alert("test");
    };
    this.something = function () {
        setInterval(function () {
            this.alerting();
        }, 1000);
    };

}

var a = new test();
a.something();

调用函数something()应该每秒调用函数alerting()。这应该每秒警告'test'。为什么不这样,我怎么能实现呢?请注意,如果可能的话,我想保留这种在方法中调用方法的设计。

6 个答案:

答案 0 :(得分:2)

http://jsfiddle.net/N6hPB/

function test() {
    this.alerting = function () {
        alert("test");
    };
    this.something = function () {
        setInterval(this.alerting, 1000);
    };    
}

var a = new test();
a.something();

答案 1 :(得分:2)

this的引用存储在变量中,并将其用于在当前上下文之外运行的方法(就像setInterval那样

function test() {
    var that = this;

    this.alerting = function () {
        alert("test");
    };
    this.something = function () {
        setInterval(function () {
            that.alerting();
        }, 1000);
    };

}

var a = new test();
a.something();

答案 2 :(得分:0)

希望这有帮助!这里的计时器以ms为单位。

function something(){
   window.setInterval(alerting, 1000); 
}

function alerting() { 
  alert('test'); 
}

答案 3 :(得分:0)

另一种方法是返回一个对象。

function test() {
    var self = {
        alerting : function () {
            console.log("test");
        },
        something : function () {
            setInterval(function () {
                self.alerting();
            }, 1000);
        }
    };
    return self;
}

var a = new test();
a.something();

答案 4 :(得分:0)

您可以使用函数创建一个对象,然后在不实例化的情况下调用它们。

var testCaller = {
    alerting: function() {
       alert("test")
    },
    something: function() {
       // Store current scope
       var self = this;
       setInterval(function() {
           self.alerting();
       }, 1000);
    }
}

testCaller.something();

答案 5 :(得分:0)

您可以尝试使用此代码。我测试了它,它的工作原理。在你的代码中,"这个"指针指向其他地方。

function test() {

    test.prototype.alerting = function() {
        alert("alert test");
    };

    test.prototype.something = function () {
        setInterval(this.alerting, 1000);
    };
}

var a = new test();
a.something();