关于JavaScript的面向对象

2013-07-18 18:36:05 +08:00
 panlilu
好久没来发帖了,一直处于万年潜水的状态。不知道还有没有朋友认识我。

不要被标题骗了,其实这是个吐槽帖。

感觉创业有点疲劳了,想去找点工作学点东西。然后去某公司应聘前端。
其实很长一段时间我都是那coffeeScript写前端的,不过反正也就是个语法糖,其实也没什么很不一样的地方。
由于是朋友内推加上我从来没有面试过,加上可能对自己的能力有点太自信了,所以完全没有任何准备。。(真该去看看类似前端面试宝典之类的东西)
面试官先问 javascript/css/html 你比较熟悉哪个?然后我说javascript吧。
然后接着问,面向对象的三个基本特征是什么。
我愣住了,说实话平时用OOP就是为了让代码看上去好看点,封装的漂亮点,偶尔可以重用下罢了。突然问我这个,我真的一下子答不上来。然后我个人心里素质也不太好,一下子就有点慌了。
然后问我javascript怎么实现这三个特性。
我只知道javascript的OOP实现是很裸的,也不怎么原生,大概就是把被继承的放到prototype里面,然后执行的时候会自己去一层层的链式调用。不过我也忘了当时是怎么说的。
总之最后的结果是,认为我的基础不够,能力在他们前端的平均能力之下,然后被拒了。

很久以前在v2ex上面看到一篇帖子讨论过 不会OOP的javascript的程序员就是野生程序员之类的。

看来我也属于一个野生程序员。

吐槽完毕。
最后友情提示大家面试前一定要准备一下(也许面试前不准备的大概也就剩我一个了吧)。
6034 次点击
所在节点    JavaScript
38 条回复
jiyinyiyong
2013-07-19 09:06:17 +08:00
@bitsmix 求留名膜拜
jiyinyiyong
2013-07-19 09:10:35 +08:00
@sivacohan 函数时语言在网页开发中恐怕体现不出什么优点
图形界面的应用变大以后面向对象是免不了的, 而 JS 缺的就是 OO
函数式在研究和理论方面特别有效, 这方面扯就太深了
Scheme 中为的是达到语法最小实现功能最强, for 被认为是多余
Haskell 里 for 这种过程式的写法基本上就不是函数式能接受的
heroicYang
2013-07-19 10:19:49 +08:00
@jiyinyiyong 这个说法我赞同,目前真正的前端JavaScript中,很难不用到OO的。。。尤其是现在的Rich Application (Single Page Application)之流~可能我功力还不够,哈哈~
bitsmix
2013-07-19 11:22:51 +08:00
@jiyinyiyong admaster
zythum
2013-07-19 13:14:10 +08:00
潘熊猫 好久不见了撒。

朱一写东西属于随心所欲流派。js的oo是原型继承,知道特性就好了。到时候该怎么用怎么用。
zythum
2013-07-19 13:16:23 +08:00
@jiyinyiyong 如果是大型项目的话 朱一建议 多调用,少继承。 这样万一产品想改个需求啊。变个什么的。不会太被动。
robertlyc
2013-07-19 13:21:19 +08:00
差点以为lz准备黑coffee哪
panlilu
2013-07-19 13:32:43 +08:00
@zythum 好久不见,我现在在北京,什么时候面基一下?哈哈
@robertlyc coffee挺好的。。
middleware
2013-07-19 14:16:14 +08:00
面向对象的三个特性:封装、多态、重用。

继承,不是基本特性,是具体机制。继承可以实现多态(接口继承),但是多态不必非要继承。继承可以实现重用(实现继承),但是重用不必非要多态。

能说明白继承不是面向对象基本特性的,我这里都会优先考虑。
jiyinyiyong
2013-07-21 00:26:33 +08:00
@zythum 啊啊啊 >_< 这招我还是学不会啊
jiyinyiyong
2013-07-21 00:28:59 +08:00
@middleware 怎么看"封装 多态 重用"都只是一个特性...
面向对象的边界到底在纳个地方...
Golevka
2013-07-21 02:41:26 +08:00
@jiyinyiyong "动态类型语言里面的面向对象说实话我也不知道究竟好在哪里,对于这种语言那来讲,只要做好functional programming的那部分,剩下的OO究竟要不要,纯粹是一个语法糖的问题。在动态类型语言里面,一个类和一个lambda expression的差别其实不大。" 其实我感觉v神说得还是挺对的.

另外, Haskell里哪来的for?
jiyinyiyong
2013-07-21 11:18:02 +08:00
@Golevka 求介绍 v神 是几楼?
Haskell 里没 for, 我是说 "Haskell 不能接受 for"
深受 #29 楼感召, 认为图形界面必用 OO, 其他领域 OO 多余
我想需要的还是那种构建更灵活的作用域的能力, 而不是 OO 这种所谓对真实的模拟
darasion
2013-07-21 11:43:36 +08:00
最近一段时间客串了一把前端。
发现如果有UE什么的画出设计图,按照设计图一步一步的做下去其实很容易。
就怕脑子里什么都没有乱写。
middleware
2013-07-23 09:03:31 +08:00
@jiyinyiyong 「封装 多态 重用」怎么可能是一个特性?它们是相互正交的,实现一个并不需要依赖另一个特性。
jiyinyiyong
2013-07-24 00:53:36 +08:00
@darasion 只是图的话应该不会有 JS 那么多 Bug 的问题吧
jiyinyiyong
2013-07-24 00:55:51 +08:00
@middleware 我理解不准确吧..
我觉得重用就必须要封装, 同时导致多态成为必要, 完全正交不懂..
middleware
2013-07-24 08:27:29 +08:00
@jiyinyiyong 重用不一定封装,实现继承就是反例。多态也是一样可以独立的。平时的项目里很少会故意忽略一项,但是不能说它们是一个特性,各自的侧重还是可以独立调整的。

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

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

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

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

© 2021 V2EX