您的位置:首页 > 其它

2015.9.24随笔

2015-09-24 23:23 381 查看
转:setTimeout和setInterval的this指向

function obj() {
this.fn = function() {
alert("ok");
console.log(this);
setTimeout(this.fn, 1000);//直接使用this引用当前对象
}
}
var o = new obj();
o.fn();


因为settimeout的this指向window,所以此时调用window.fn,得不到想要的结果

两种方法改变this指向

// 方法一:

function obj() {
this.fn = function() {
alert("ok");
console.log(this);
setTimeout(this.fn.bind(this), 1000);//通过Function.prototype.bind 绑定当前对象
}
}
var o = new obj();
o.fn();


// 方法二:
function obj() {
this.fn = function() {
var that = this;//保存当前对象this
alert("ok");
setTimeout(function(){
that.fn();
}, 1000);//通过闭包得到当前作用域,好访问保存好的对象that
}
}
var o = new obj();
o.fn();


以前看同学写var that = this;自己也跟着写,原来是这个作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: