Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SetTimeout上下文绑定_Javascript_Jquery_Twitter Bootstrap - Fatal编程技术网

Javascript SetTimeout上下文绑定

Javascript SetTimeout上下文绑定,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我试图设置一个超时来隐藏引导模式,但即使使用我认为正确的上下文绑定,我也无法隐藏该模式。然而,当包装在函数中时,我确实让它工作了,而且由于我经常成功地使用bind命令,我想知道哪里出了问题 function Foo() { this.$modal = $('#modal'); return this; } // bad Foo.prototype.submitModal = function() { var self = this; this.doAjaxSubm

我试图设置一个超时来隐藏引导模式,但即使使用我认为正确的上下文绑定,我也无法隐藏该模式。然而,当包装在函数中时,我确实让它工作了,而且由于我经常成功地使用
bind
命令,我想知道哪里出了问题

function Foo() {
    this.$modal = $('#modal');
    return this;
}
// bad
Foo.prototype.submitModal = function() {
    var self = this;
    this.doAjaxSubmit()
        .done(function() {
                // undefined function
                setTimeout(self.$modal.modal.bind(self, 'hide'), 1000)
        })
}

// good
Foo.prototype.submitModal = function() {
    var self = this;
    this.doAjaxSubmit()
        .done(function() {
            // works
            setTimeout(hideModal, 1000)
        })

    function hideModal() {
        self.$modal.modal('hide');
    }
}

setTimeout(self.$modal.modal.bind(self,'hide'))1000中存在语法错误。
。这只是文章中的一个输入错误还是你的实际代码中的一个输入错误?还是你减少了你的实际代码,遗漏了一个关键的部分?只是我的文章中的一个输入错误。你为什么要找到自我的模态函数?这似乎不对。你确定它不应该是$modal吗?听起来您想使用分部而不是绑定。为此,请将undefined作为bind函数的第一个参数传入。
self.$modal.modal('hide')
相当于self.$modal.modal.call(self.$modal,'hide')所以我想你想要的是
self.$modal.modal.bind(self.$modal,'hide')
。partial(partial应用程序的缩写)是你创建一个新函数的地方,在这里你可以封闭函数的前几个参数(上下文被保留)。如果z(x,y)=x+y,那么我们可以通过用x=4封闭第一个参数来形成一个新的函数w(y)。i、 e.w(y)=z(4,y)。这就是您试图对bind调用所做的:创建一个函数,该函数的第一个参数用值“hide”密封,但您也在更改执行该函数的上下文。