有人用 JavaScript 的# 来创建私有变量么?

2020-07-16 22:33:53 +08:00
 evilStart
#这个语法出来也有一段时间了,但我几乎没有见过有项目里用过?有商业或者大的开源项目用这个方法么?
4328 次点击
所在节点    JavaScript
32 条回复
rioshikelong121
2020-07-17 14:39:47 +08:00
没有 直接 ts private 。
gaoryrt
2020-07-17 15:08:05 +08:00
根本不懂什么叫封装也可以写好前端。
浏览器环境的话,可以,但没有必要。
libook
2020-07-17 15:42:59 +08:00
我们在用,不过确实用得不多,主要是因为将成员私有化这个需求本身就比较少出现,而且利用局部变量往往也可以达到私有化的效果(比如闭包)。

这个就是个特性而已,没有需求就不用,有需求能想起来用就行。
optional
2020-07-17 15:50:59 +08:00
@ChanKc 封装这大概率是 oo 的说法,js 根本不是纯粹的 oo 语言。 作为一门业务型语音,比较认同上面 Austaras 说的,hard private 是个弱智,依赖这玩意的说明你根本不相信你的队友。
yaphets666
2020-07-17 15:52:15 +08:00
js 现在需要的是语法糖 不需要任何新的概念性的东西了
MrTreasure
2020-07-17 17:30:28 +08:00
没有使用的场景。

前端无非就是 Vue React NG,NG 就不说了,没有几个人用 NG 不用 TS 吧。用 Vue 和 React 的大概率也用不到封装。

那么用到的封装的,大部分是需要写库,写 SDK 的。这些场景大概率会选择 TS 。
ChanKc
2020-07-17 18:33:20 +08:00
@optional 不是不相信我的队友,就如#26 所说,一般都是写库和写 SDK 的需要。还有一种情况可能是跨团队。
封装就是暴露接口,隐藏实现。暴露和隐藏都是关键。暴露的接口可以认为是有保证的,一定会出现预期的(和文档描述一致的)结果。在这个基础上,所有隐藏的部分,无论是方法还是域都可以随便改随便重构。
hard private 的好处是可以保证你的 API 的使用者的程序一定不会因为你的重构,升级和优化等等而受到破坏。当然如果所有 API 的使用者都遵循 naming convention,这些 API 的使用者也可以受到封装带来的好处。
封装的主要受益人是 API 使用者,但是却是 API 的开发者来写的。如果库,SDK 的开发者根本不在乎他的用户的长期的使用体验,可以不用封装。
#22 说的情况是,过去很长时间里,前端的库不多,在浏览器运行的代码也不多,很多时候用户都是自己调自己的方法,这时候可能就是“跑起来就行”
还有一种情况是,很多程序在开始建项目的时候确定了一个版本,后来就没再升级过,这个时候就可以像#2 那样随便 hack
wobuhuicode
2020-07-17 18:39:31 +08:00
约定命名作为私有也就够了。比如说下划线命名的就是私有之类的。
放在其它语言你搞个 SDK 出来,人家照样能在 runtime 读取你的私有变量。不也是一个打破约定的事情嘛。
所以私有公有无非就是大家都要去遵守的约定才有效。
Yuiham
2020-07-17 19:10:45 +08:00
这个 proposal 一堆问题,最好不要进入 ES 标准了。大部分时候 Symbol 足够用了。
optional
2020-07-17 19:11:59 +08:00
@ChanKc 这一套道理谁都明白。,但是业务型语言就是业务型语言,你看新出的语言,限制都在弱化,或者说都在践行『约定大于配置』,用大小写控制可见性,ducktype 替代 interface 。
hard private 真的是你需要的吗?
ChanKc
2020-07-17 19:13:18 +08:00
@optional 我需不需要看场景啊,我觉得会有场景需要
chnwillliu
2020-07-19 20:23:24 +08:00
搭配 ES6 的 Proxy 一起食用那叫一个酸爽,保准泪流满面哭着喊苍天啊这都什么鬼 feature 啊 https://github.com/tc39/proposal-class-fields/issues/106 有兴趣可以看看这个 issue

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX