CNode

第一篇技术博客:不要滥用this绑定

分享
Zzhanzhenzhen发布于10 年前最后回复10 年前10 回复5722 浏览0 收藏

我的博客在: 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这样的库。

查看回复

回复 (10)

H
hanting001#1·10 年前

函数里的this就是调用这个函数的家伙,明白了这点就可以了

1
1340641314#2·10 年前

后台管理系统的页面,正在逐渐使用vue来代替jq来自react-cnode手机版

I
i5ting#3·10 年前

你还能找出比jQuery更好的库么?

L
limaofeng#4·10 年前

知道是怎么回事就好、拒绝并不是一个好办法。 From Noder

Q
qinyang912#5·10 年前

该用还是得用,在jq的时候特殊处理一下就行,总比程序到处都是self,_this好

Z
zouzhenxing#6·10 年前

夢卜白菜,各有所爱 From Noder

C
Coffcer#7·10 年前

参数顺序不同而已 $(":checkbox").map((i, m) => m.id)

A
alsotang#8·10 年前

this的隐式指向时不时就有坑,能不依赖它确定变量就尽量不用。类似本文中的例子,我觉得用参数的形式挺好的。

M
mosaic101#9·10 年前

本公司的node代码充斥着this,美名其曰面向对象,蛋疼

C
captainblue2013#10·10 年前

JS应该逐步走向正规化,以前的语法思路充斥着奇技淫巧的意味。 正如你们所说的,很容易隐藏很多坑,甚至都不好调试。 现在以后,尽量避免滥用,关爱填坑人,由你我做起。

参与回复
登录后即可参与回复。登录