请停止将 JavaScript 类型化(建议不要使用 class 实现类继承)

2015-07-27 11:16:19 +08:00
 ibloging

http://ourjs.com/detail/55b5a17afbd23139de9e354c

6015 次点击
所在节点    程序员
49 条回复
phoenixlzx
2015-07-27 11:17:49 +08:00
卷写 js还没用过 class 来着
FrankFang128
2015-07-27 11:19:29 +08:00
我实名拒绝在 JavaScript 里使用 class
yakczh
2015-07-27 11:32:11 +08:00
原型挺好的,需要什么功能就动态加上就行了, 如果按java那样搞,需要动态功能了,那得在内存中修改字节码
tushiner
2015-07-27 11:43:18 +08:00
妄图给js强加传统oo特性的都是不懂装懂之人
ffffwh
2015-07-27 11:44:31 +08:00
@yakczh
为了性能
magicyu1986
2015-07-27 11:45:15 +08:00
class属于有的没的东西,有了更好,没了也将就(好吧,每个人都写过一个拷贝式继承函数对吧)。
给一个正儿八经的int跟byte才是王道。看着用64位浮点模拟byte好可怜。
YuJianrong
2015-07-27 11:49:27 +08:00
继承结构复杂的情况下用class style很好,很能解决问题。
说这种话的人我觉得是没经过大脑,去看看browser自己的实现,随便找一个:
HTMLDivElement -> HTMLElement -> Element -> Node -> EventTarget -> Object
这哪里是什么“清晰,整洁,也更符合语言”的原型方式啦……

项目复杂的话,用同样方式抽象不是非常合理的吗……
tabris17
2015-07-27 11:51:17 +08:00
@ffffwh JIT方法已经能很好地解决Javascript原型链访问的性能问题了
matsuijurina
2015-07-27 11:51:44 +08:00
反正我用coffeescript
tushiner
2015-07-27 11:53:37 +08:00
@YuJianrong 楼主的意思是,不要将传统面向对象语言的class与js的prototype混为一谈,没有说不使用继承、封装等思想。
otakustay
2015-07-27 11:56:13 +08:00
这作者简直在扯谈

《停止将JavaScript类型化,不要使用class》
《停止将JavaScript函数化,不要使用function作为第一级对象》

然后JavaScript就消失了呗

而且论点站不住脚,因为一个东西可能被人误解,所以我们不要用它,这样的话社会永远没有进步
YuJianrong
2015-07-27 12:02:37 +08:00
@tushiner 仔细看看文章去:

我很清楚经典继承方式的吸引力。甚至道格拉斯Crockford, JavaScript Good Parts (原声PPT) 作者 都实现了一个经典的伪继承 , 开明的JavaScript的创造者布Brendan Eich似乎喜欢很ES6中的class。对于许多程序员来说,这是在他们使用JavaScript之前很熟悉和舒适的编程方式。然而,JavaScript并不是一个经典的语言,语法糖和ES6的新class关键字只是在自欺欺人。
...
...如果你想了解 class 这样的关键字为什么那么可怕,为什么原型继承比经典的好....


这还不是明说了不要搞继承要用原型吗……
learnshare
2015-07-27 12:05:29 +08:00
人生苦短,我用 TypeScript
tabris17
2015-07-27 12:06:05 +08:00
我觉得原型的最大弊端就是容易写出糟糕的代码,而且这种代码根本无法阅读和调试
tushiner
2015-07-27 12:07:23 +08:00
@YuJianrong ”使用原型“就是js版本的”继承“,继承是一种思想,而不是语法,与关键字、表达式结构无关。
tushiner
2015-07-27 12:11:41 +08:00
@tabris17 这点确实是的,只能靠不断积累的经验技巧来解决这些问题
ixiaohei
2015-07-27 12:18:55 +08:00
读不懂这文章讲的啥
Jex
2015-07-27 12:29:34 +08:00
前几天刚说过某些 JavaScript 程序员压根不懂 OOP 就在那瞎扯有的没的: http://www.zhihu.com/question/24076626/answer/55284360

怎么又来瞎扯个不停呢。
《请停止向 JavaScript 中添加 yield,用 callback 即可》
《请停止向 JavaScript 中添加 let,用闭包即可》
《请停止向汇编语言中添加 call 指令,用 push jump即可》
这就有点像CISC跟RISC之争一样,事实上只需要一个翻译器运行时将复杂指令再转换成精简指令就行。之所以要有程序语言就是为的抽象啊。

我在话题下面说过了,https://v2ex.com/t/201281 ,现实会来打他们的脸。


——
原来我曾经看过的GC测试是在你博客上看到的 @otakustay
http://otakustay.com/about-closure-and-gc/
tabris17
2015-07-27 12:38:11 +08:00
@tushiner 没有技巧的语言才是适合生产的语言
datou552211
2015-07-27 12:49:06 +08:00
@tabris17 只能说实现特定功能的语法糖太多了不好

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

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

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

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

© 2021 V2EX