闭包绑定this
程序员文章站
2024-03-26 09:44:41
...
有的时候需要在回调函数中访问到this 中的内容,而回调函数往往是挂在全局上的匿名函数,这样就访问不到this中的内容。这时,可以使用闭包去绑定this(当然箭头函数也可以实现默认的绑定效果)。
var obj = {
name: "zsk",
sayName: function () {
console.log(this.name);
}
};
obj.sayName();
var obj1 = {
name: "zpx",
sayTimeoutName: function () {
setTimeout(function () {
console.log(this.name);
}, 20);
}
};
obj1.sayTimeoutName();
运行结果:
可以看出是没有打印出来 zpx 的内容的。
为了访问到 this 中 name,我们可以这么做:
var obj1 = {
name: "zpx",
sayTimeoutName: function () {
var sayName = function (that) {
return function () {
console.log(that.name);
}
}(this);
setTimeout(sayName, 20);
}
};
obj1.sayTimeoutName();
这样运行结果:
这样就可以访问到this name了。
除此之外,箭头函数也可以实现默认所在地方 this 的绑定。
var obj1 = {
name: "zpx",
sayTimeoutName: function () {
setTimeout(() => {
console.log(this.name);
}, 20);
}
};
obj1.sayTimeoutName();
运行结果:
上一篇: 模板不能分离编译及相关问题
下一篇: vue的一些坑