更好的处理方式'这'在Javascript的闭包中
Better way of handling 'this' in closures in Javascript?
我经常编写以下形式的Javascript代码:
MyClass.prototype.loadData = function() {
var oReq = new XMLHttpRequest();
var obj = this;
oReq.onload = function() { obj.onDataLoaded(); }
oReq.open("get", url, true);
oReq.send();
}
似乎不合法的部分是var obj=this
,它将当前对象分配给一个临时变量(obj
),以便能够在oReq.onload
函数中引用它。对于除this
之外的所有其他变量,这是不必要的,因为它们自动成为闭包的一部分,因此可以在onload()
中引用。但是this
不是闭包的一部分,而是总是(?)指该方法绑定到的对象。
那么,从绑定到另一个对象的函数中访问当前this
对象,有没有比先将this
分配给临时变量然后使用该变量更惯用的方法呢?
这更简单:
this.onload = this.onDataLoaded.bind(this);
另一个方便的解决方案将提供ES6,箭头函数及其词法绑定:
this.onload = () => { this.onDataLoaded() }
(您已经可以在Firefox中使用它们)
相关文章:
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- Javascript.闭包和dynamic'这'实际上具有约束力
- 用于添加两个数字的javascript闭包的用法
- 什么'这个javascript闭包的区别是什么
- 我可以使用JavaScript闭包添加数字吗
- javascript闭包:保护内部变量
- JavaScript闭包&回调函数
- 这些被认为是Javascript闭包吗
- JSHint 错误“对象不支持此属性或方法”用于 javascript 闭包
- JavaScript闭包的效果如何
- JavaScript 闭包和 for 循环
- 在谷歌地图示例中为 Ajax 调用制作一个 JavaScript 闭包
- JavaScript闭包和返回数组元素
- 如何在严格模式下实现以下JavaScript闭包
- 请解释这个Javascript闭包练习
- JavaScript闭包和变量引用
- Javascript闭包覆盖函数表达式
- Javascript闭包错误
- 为什么JavaScript闭包不能与预定义的函数一起使用