论坛首页 Web前端技术论坛

JavaScript里面真的需要继承吗?

浏览 15220 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (18)
作者 正文
   发表时间:2009-04-30  
为什么要继承呢?因为代码重用,javascript代码重用方法有很多,所以嘛,继承只是一种选择,并且不是最好的选择,javascript: the good part,这本书不错,最近正在看。
0 请登录后投票
   发表时间:2009-04-30  
这个东西很难说,就像尼古拉斯说的一样,很多 js 程序员不用继承一样一写多年,可是当面对到UI的设计和各式各样的lib构建的时候,我想LZ就会明白为什么要继承.另外,反射是OO编程里必须的,用书上的一句原话,因为 js 是弱对象类型,如果一个方法中传入了一个值,你不做处理的话,如果 ASDBSADF 这样的东西,也能当作邮编么 ?? 浅谈,纯属个人看法.
0 请登录后投票
   发表时间:2009-04-30  
典型的因噎废食
0 请登录后投票
   发表时间:2009-04-30  
yuan 写道

分明是继承的使用有问题,偏要归咎到语言上。
那JavaScript的function原生的prototype属性是做什么的呢?


同意同意,不能把责任全部推到js的继承上

不知道LZ看过这篇文章没:JavaScript:世界上最被误解的语言
0 请登录后投票
   发表时间:2009-05-01   最后修改:2009-05-01
ECMA script (含 JavaScript,ActionScript 等) 是基于原型 ( prototype based ) 的面向对象编程,
在 ECMA script 里生搬硬套基于类 ( class based ) 的面向对象编程那一套是行不通的。

注意1:这和动态类型/静态类型没关系,有基于原型的的静态类型语言 ( Omega ),也有基于类的动态类型语言 ( smalltalk )
注意2:类 ( class ) 不等于类型 ( type ),虽然某些语言中两者是等价的……

下面为了方便表述,把 ...原型... 称为 POO,把 ...类... 称为 COO。

POO 没有 COO 流行,所以 COO 已经差不多和面向对象这个词等价了,很多人一讲到 OO 就想到封装、继承、多态。

但事实呢,继承只是 COO 复用代码的一种方法,而 POO 对应的手段是复制原型。
COO 强调类的不变性,而 POO 没有类,只有原型。
原型是可以运行时修改的,类一般不可以(有些语言可以通过非常手段如 classLoader 在运行时进行类的修改)。

POO 和 COO 哪个更 NB 的争论是没有结果的。但是我觉得 POO 更灵活,更适合脚本语言使用。

补充:   POO 和 COO 的分类不是绝对的,譬如 C 语言和 Ruby 既能做 POO 的设计,也能做 COO 的设计。
再补充: OO 根本不学院派,学院派才不鸟 OO 呢。
0 请登录后投票
   发表时间:2009-05-01  
这是一个老问题了。其实答案很简单:

1. 我可以不用继承。js高手都可以不用继承。——废话,如果不用继承就不成,那还是js高手吗?

2. 人们需要“类”(注意类和继承有差别,但是姑且认为楼主指的是类及相关的继承等)。这是不以js高手的意志为转移的事实。框架和代码库给出了最好的答案。为什么几乎所有的框架都要给出类和继承的方案,说明人民有需要。

3. js过去没有,不代表它不应该有。js的现状只是表明了10年前开始的历史结果,不代表它应该就是如此。Brenden Eich(JS之父)在之前ES4和ES3.1的争论中所阐述的观点其实很有道理(具体请自行google)。虽然现在ES edition 5的最终结果是一个渐进的折中方案,但是我本人更赞同BE,而不是以Yahoo的DC和微软为代表的补丁观点。现在的结果只是一个政治正确的妥协。
0 请登录后投票
   发表时间:2009-05-02  
js调试太恶心了 好烦这个
最近这个项目每个页面都快2000行js 可是写死我 又不好调试 烦
0 请登录后投票
   发表时间:2009-05-02  
whaosoft 写道
js调试太恶心了 好烦这个
最近这个项目每个页面都快2000行js 可是写死我 又不好调试 烦

哈哈,js很好调试,~~
0 请登录后投票
   发表时间:2009-05-02  
firebug还好,ie下用什么工具?
0 请登录后投票
   发表时间:2009-05-02  
Else 写道
firebug还好,ie下用什么工具?


ie8自带的调试工具,调试js比firebug还方便
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics