1
otakustay 2014-03-06 16:12:02 +08:00
5万行以上js组成的系统,页面可以分类,通用性很大(比如用户列表、书列表、借阅列表、列表列表列表表单表单表单)……
|
2
hkongm 2014-03-06 16:37:57 +08:00 1
个人看法:JS这几年太强调OO了,不适合JS本身。
只要能完成需求,出产品,无所谓是否OO。别跟自己过不去 |
4
FrankFang128 2014-03-06 17:05:24 +08:00
一般不用继承,用构造函数加属性就好了。
不要在写 JS 的时候想着 Java,身在曹营心在汉! JS 是面向对象,Java 是面向类,理念不同。 |
5
dorentus 2014-03-06 18:20:10 +08:00
Javascript 有继承吗?
|
6
bakac 2014-03-06 18:21:54 +08:00
都是原型链上加东西而已
|
7
arbipher 2014-03-06 18:32:48 +08:00
为什么JS面向对象很难理解,因为“继承”这种方式不是在所有的OO中都用得到的。
OO还有基于对象clone的OO(self),有基于继承的(java),基于原型的(JS)。 JS的“继承”和它本身的原型混杂在一起。 |
8
Julyyq 2014-03-06 18:39:30 +08:00 1
首先,实现JS继承的方法有很多种,不止是简单的在原型链上加东西而已。
其次,实际应用场景在大项目中使用比较多,因为往往大项目中功能比较复杂,如果不做好代码的抽象和封装,那么你越写就感觉越“难写”,更别说将来维护你代码的人了。 最后,举个栗子,比如一个网站中有个Search类(就像百度首页那样输入搜索内容,下面会有提示的东西),比较好的实践是Search类继承自Input类,Search类只负责“搜索”,Input类只负责“设置数据”,“获取数据”等和用户的输入值相关的操作。像这样每个类各司其职,代码的藕合度就会大大降低,扩展性也会得到非常大的提高。 |
9
otakustay 2014-03-06 18:57:35 +08:00
@FrankFang128 无论js是什么方式的OO,他都是OO,有OO就有继承嘛,原型继承也是继承,我想楼主也没说是java的那种基于class的继承
我认为继承还是需要的,但要有js的特色,比如社会主义……(有快递我去开下门) 复习下,面向对象3大特性:封装性、多态性、继承性,和怎么样OO没有关系 |
10
FrankFang128 2014-03-06 20:11:57 +08:00
@otakustay JS 当然是 Object-oriented,Java 倒像是 Class-oriented。
|
11
otakustay 2014-03-06 21:04:17 +08:00 1
@FrankFang128 厄……我的概念和你不一样,我是这么认为的:
1. JS和JAVA都是Object-oriented 2. JS是prototype based object-oriented 3. Java是class based object-oriented |
12
darasion 2014-03-06 23:14:38 +08:00
没啥优势。
反正我不用继承。 |
13
miniwade514 OP @otakustay ,@hitsmaxft ,@Julyyq
看来还是在大项目中用得多,有很多要被重用的功能,就封装到类 @hkongm ,@darasion 我相信还是有适合使用继承的场景的,但是我经验不足导致无法拿捏 @FrankFang128 I wish I knew Java @_@ @arbipher 我一直以为JS是基于“原型”的“继承”啊,听你一说有点懵了…… 感谢各位的精彩回复! 不过还是很期待各位分享一下对 “在哪些时候使用继承?” 的见解啊! |
14
miniwade514 OP 如果能举个栗子,那就更好了! 多谢
|
15
arbipher 2014-03-07 01:01:12 +08:00
@miniwade514 我说的不准,后来也没法修改了。我的意思就是11楼。继承只是OO的一种方法。
|
16
muyeyang 2014-03-07 02:10:03 +08:00 via iPad
觉得Javascript用mixin比较多。继承没有什么用。
个人以为,面向对象的核心应该是: 1 消息 2 委托 消息通讯把每一对象的实现隐藏在接口之下。 通过把复杂的功能委托给其他对象,使得每个对象只用关心自己的核心问题。 |
17
arbipher 2014-03-07 02:55:31 +08:00 via iPhone
@muyeyang 我觉得OO的核心是 消息传递和多态。委托更像是实现技巧,或者说设计模式。
好吧,我是来抠字眼的。 |
18
sivacohan 2014-03-07 12:42:21 +08:00
先说明,js我连入门都算不上……
似乎有这么一句话 “面向对象除了在GUI上其他方面并没有什么优势” 大概是在Unix编程艺术里面提到的 如果js很贴近响应,那基本就没办法写什么面向对象了。各种事件什么的。 如果做web app的话,可以把逻辑提取出来,做点抽象。如果做动画库的时候,也可以考虑抽象点东西出来。 我现在些js的话,通常会分出这么几个类型的。models,数据类型,里面会做一些数据的过滤和绑定之类的东西。helper,简单的帮助类,不允许有人继承helper,但是helper有可能继承models。tpl,直接对应templates,这里面的东西都是一次性的了…… |
19
miniwade514 OP @sivacohan 看来除非写的东西已经达到了框架/库的复杂度(就像你说的动画库、和你自己实现的MVC),否则继承的运用场景确实不是很多。就我自己的经验而言,一般也就抽象到类,很少用继承再去抽象出子类什么的。
|
20
vilic 2014-03-07 14:03:11 +08:00
个人一时的观点. JS 继承用得不多的一个很重要的原因是, 不方便. 所以大家没有这个习惯. 但实际上有很多异曲同工的方法被广泛地使用了, 本质上它们的作用是一样的.
|
21
yakczh 2014-03-07 19:48:51 +08:00
js都是实例的引用,所谓的继承就是把引用的值都复制一份,还分深浅复制,其实js实例就是个{}容器,开始把能想到的属性写上去,程序在执行的时候,需要什么再加什么就行了
|
22
miniwade514 OP |