我的博客在: https://zhanzhenzhen.github.io/2016_08_14您可以在我的网站内评论,这样如果我回复了您,您将收到Email通知。
不要滥用this绑定
——讨厌的jQuery风格
这是我的第一篇技术博客。
很久以前就用过jQuery的程序员一定不会对.map
这个方法陌生,它的用法是这样的:
$(":checkbox")
.map(function() {
return this.id;
})
因为我是从C#转到JavaScript的,觉得在JS中可以让this
来担任参数的角色,会把概念搞乱,所以我一开始就很不喜欢这种做法。而且,现在有了ES2015的箭头函数,局限性更大了,因为它将导致无法使用箭头函数:
$(":checkbox")
.map(() => this.id)
上述代码是错误的,因为箭头函数中的this
是不可自定义的,它始终绑定为外层的this
。
而如果改成参数风格的话,就可以使用箭头函数了:
$(":checkbox")
.map(m => m.id)
遗憾的是jQuery不支持这种风格。
总之,我觉得让this
的含义可变是JavaScript的错误设计,因为它会导致滥用,但好在我们可以避免,办法就是:让它只出现在“类的方法”或“对象的方法”的内部,不要在其他任何地方使用this
,也尽量不要使用jQuery这样的库。