javascript显示带超时的可重写消息

javascript显示带超时的可重写消息,javascript,Javascript,我试图做的是显示消息5秒,但如果我显示新消息,计时器应该重置为5秒 我的理论是,如果我用一个新的message函数覆盖包含message函数的message变量,旧函数将与它包含的计时器一起销毁 但它不起作用,我认为旧的计时器仍然存在,因为有时一条消息显示不到5秒 如果您想覆盖对象的一部分变量,如中的this.timer,请不要在每次单击时创建对象的新实例,使用简单的方法并使用相同的函数,并清除子任务单击时的超时 var message; function Message(message) {

我试图做的是显示消息5秒,但如果我显示新消息,计时器应该重置为5秒

我的理论是,如果我用一个新的
message
函数覆盖包含
message
函数的
message
变量,旧函数将与它包含的计时器一起销毁

但它不起作用,我认为旧的计时器仍然存在,因为有时一条消息显示不到5秒


如果您想覆盖对象的一部分变量,如
中的this.timer
,请不要在每次单击时创建对象的新实例,使用简单的方法并使用相同的函数,并清除子任务单击时的超时

var message;

function Message(message) {
        (function () {
            $('#configMsg').html(message);
        }());
        this.timer = setTimeout(function () {
            $('#configMsg').html('');
        }, 5000);
    }

    $('#foo').click(function () {
        message = new Message('foo');
    });

    $('#bar').click(function () {
        message = new Message('bar');
    });

如果要覆盖对象的一部分变量,如
this.timer
中所述,请不要在每次单击时创建对象的新实例,使用简单的方法并使用相同的函数,然后清除子任务单击时的超时

var message;

function Message(message) {
        (function () {
            $('#configMsg').html(message);
        }());
        this.timer = setTimeout(function () {
            $('#configMsg').html('');
        }, 5000);
    }

    $('#foo').click(function () {
        message = new Message('foo');
    });

    $('#bar').click(function () {
        message = new Message('bar');
    });

您希望在每次创建新邮件时清除计时器

function message(message) {
    $('#configMsg').html(message);
    clearTimeout(this.timer);
    this.timer = setTimeout(function () {
        $('#configMsg').html('');
    }, 5000);
}

$('#foo').click(function () {
    message('foo');
});

$('#bar').click(function () {
    message('bar');
});

您希望在每次创建新邮件时清除计时器

function message(message) {
    $('#configMsg').html(message);
    clearTimeout(this.timer);
    this.timer = setTimeout(function () {
        $('#configMsg').html('');
    }, 5000);
}

$('#foo').click(function () {
    message('foo');
});

$('#bar').click(function () {
    message('bar');
});

您需要保存超时引用,并在创建新超时时重置它:

function Message(message) {
    var elem = $('#configMsg');
    elem.html(message);
    window.clearTimeout(elem.data("timer"));  //if there is a previous timer, cancel it
    elem.data("timer", setTimeout(function () {  //store the timer reference to remove
        elem.html('');
    }, 5000));
}

您需要保存超时引用,并在创建新超时时重置它:

function Message(message) {
    var elem = $('#configMsg');
    elem.html(message);
    window.clearTimeout(elem.data("timer"));  //if there is a previous timer, cancel it
    elem.data("timer", setTimeout(function () {  //store the timer reference to remove
        elem.html('');
    }, 5000));
}

如果函数有一个私有计时器和一个公共message()方法,那该怎么办


如果函数有一个私有计时器和一个公共message()方法,那该怎么办


在这段代码中,自调用函数毫无意义。@Chris我还在学习oo javascript,我不确定函数“object”在“实例化”时是否运行自己的代码一个类的新实例在实例化时运行代码,但类有它们的用途,特别是当你需要一个具有不同原型的新实例时。在这种情况下,绝对没有理由使用这种模式,每次单击都要创建一个新实例?在这段代码中,自调用函数是毫无意义的。@Chris我还在学习oo javascript,我不确定函数“对象”在“实例化”时是否运行自己的代码类的新实例在实例化时运行代码,但类有其用途,特别是当您需要具有不同原型的新实例等时。在这种情况下,绝对没有理由使用此模式,每次点击都要创建一个新实例吗?谢谢你的帮助,但我真的想让计时器保持在消息函数的作用域内谢谢你的帮助,但我真的想让计时器保持在消息函数的作用域内你刚刚创建了一个全局变量,而在另一篇文章中OP不想要全局…@epascarello-sssjh,他不知道
这个
可能是该范围内的窗口。你刚刚创建了一个全局变量,而OP在另一篇文章中不想要全局…@epascarello-sssjh,他不知道
这个
可能是该范围内的窗口。