不用class的JS程序员是野生程序员?

2013-02-04 22:01:14 +08:00
 WarWithinMe
前因:我不止一次地被问倒“请用JS写一个类,然后再写一个子类来继承它”。当谈及为什么要写一个类的时候。提问者往往会回答“因为面向对象能够让我们复用代码,多态,应对不同的产品需求,blah blah blah”。然后如果你答不出的话,大概就被认为是个野生程序员,能力底下之类。

但是,在JS里面,为了实现封装、多态的目的,真的只能用“类”这种方式吗?我觉得JS提供的匿名函数、闭包等特性就能够达到代码封装和可扩展的目的。

我怎么就觉得他们认为写代码就是要面向对象,面向对象就是要写类。。。

很想听一下大家的看法。
9267 次点击
所在节点    JavaScript
64 条回复
binux
2013-02-04 22:03:14 +08:00
作为野生程序员,我确实从不写类
RTNelo
2013-02-04 22:04:42 +08:00
好吧。。。没写过JS。。。只对那句“我怎么就觉得他们认blablabla”评论一下。。。
RTNelo
2013-02-04 22:07:19 +08:00
@RTNelo 哦*。。。我怎么回复过去了。。。一般情况下我是一边写一边改(Python)。。。有代码用到2次(及以上)的就写成函数。。。相关联的函数多了有可能就搞成一个类。。。相关联的类多了可能会放到一个模块里。。。blablablabla
WarWithinMe
2013-02-04 22:20:38 +08:00
@RTNelo 主要是我觉得用JS其他的特性也能实现和“类”能做的事情,但说如果不用类来做这些事情就是野生的话,那我就真的只能理解他们是为了写类而写类。。
WarWithinMe
2013-02-04 22:21:49 +08:00
@binux 你是真野生还是伪野生。。。。
davidx
2013-02-04 22:24:43 +08:00
那用jQuery的都是野生的了?
binux
2013-02-04 22:26:51 +08:00
@WarWithinMe w3school毕业真野生
zythum
2013-02-04 22:54:37 +08:00
js属于prototype继承,原生并没有super的概念。这些东西都是用各种蛋疼的方式做出来的。
所以js的继承都不是完全的。并且也没有虚函数的概念所以所有的约定都不是强制的。这些所谓的设计模式感觉是为了设计模式而设计模式。

需要的时候可以做一些。但是不要太过于使用继承。做1,2层就可以了。
尽量做调用。类似于oc的概念。
kran
2013-02-04 23:05:05 +08:00
越来越少写类了
xvfeng
2013-02-04 23:18:06 +08:00
try coffee
tux
2013-02-04 23:18:12 +08:00
别人问就说自己不会编程,自己写自己的~
viator42
2013-02-04 23:25:31 +08:00
用Extjs算什么程度?
iwinux
2013-02-04 23:57:56 +08:00
楼主可以把 Organizing Programs Without Classes 这篇经典论文印出来摔他们脸上……
wang2191195
2013-02-05 00:02:09 +08:00
为了面向对象而面向对象 也只能哦了
qq286735628
2013-02-05 00:18:10 +08:00
野生的~
都是prototype,都是对象~
说不定过几年,正统的类会完整继承JAVA的那些个特性.....
j
2013-02-05 01:41:50 +08:00
没必要给野生主管干活吧!
用原生js随便写一个class的实现就好了~
qzwex2006
2013-02-05 09:56:48 +08:00
面向对象只是一种思想0 0
不管什么方法能解决问题, 并且更好的解决就行吧.
DrWeb
2013-02-05 10:40:52 +08:00
javascript是原型继承,并不是一个完全的面向对象的语言,类这个东西,js里没有.Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual.如果一定要用也可以,不过没必要的话就算了吧,不是什么语言都一定要用面向对象的.
zhangxiujiao
2013-02-05 10:49:57 +08:00
@DrWeb 建议你把面向对象的三大要素在复习下
aisk
2013-02-05 10:56:59 +08:00
@DrWeb 真想找个什么东西糊你脸上啊。。。

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

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

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

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

© 2021 V2EX