Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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的“this”在使用setTimeout时引用对象?_Javascript_This_Settimeout - Fatal编程技术网

如何确保Javascript的“this”在使用setTimeout时引用对象?

如何确保Javascript的“this”在使用setTimeout时引用对象?,javascript,this,settimeout,Javascript,This,Settimeout,因此,当它从setTimeout调用obj.foo时,“this”会更改窗口的所有权。我如何防止这种行为或正确处理这种行为 谢谢使用.bind调用 并不是所有浏览器都支持它,但MDN上有一个垫片,下划线有u.bind。。。同样使用像这样的绑定方法 setTimeout(this.foo.bind(this),300); 使用bind的答案是最好的、最现代的处理方法。但是,如果您必须支持较旧的环境,并且不想填充Function.prototype.bind,那么您也可以这样做: setTimeo

因此,当它从setTimeout调用obj.foo时,“this”会更改窗口的所有权。我如何防止这种行为或正确处理这种行为

谢谢

使用.bind调用


并不是所有浏览器都支持它,但MDN上有一个垫片,下划线有u.bind。。。同样

使用像这样的绑定方法

setTimeout(this.foo.bind(this),300);
使用bind的答案是最好的、最现代的处理方法。但是,如果您必须支持较旧的环境,并且不想填充Function.prototype.bind,那么您也可以这样做:

setTimeout(this.foo.bind(this),300);

@那不是为我做的。工作和以前一样。Bind是我需要的答案,但谢谢。
setTimeout(this.foo.bind(this),300);
setTimeout(this.foo.bind(this),300);
Obj.prototype.bar = function (){
    log('bar() was triggered');
    var ob = this;
    setTimeout(function() {ob.foo();}, 300);
}