Javascript 的**继承**通常被运用在哪些场景?根据你的经验来谈谈吧! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
miniwade514

Javascript 的**继承**通常被运用在哪些场景?根据你的经验来谈谈吧!

  •  
  •   miniwade514 Mar 6, 2014 6491 views
    This topic created in 4438 days ago, the information mentioned may be changed or developed.
    以前写一个简单的“双人对战打砖块”的小游戏时,砖块、挡板是父类,双方各自的砖块、挡板是子类。这是我记得的唯一一次使用继承。平时的网页里写的JS基本没用过继承(彻底暴露菜鸟身份……)。

    可能是因为我对面向对象的概念理解不够深,所以没能充分利用 JS 面向对象的优势。

    请各位不吝分享,自己平时都会在哪些时候使用继承?怎么用?

    谢谢!
    22 replies    1970-01-01 08:00:00 +08:00
    otakustay
        1
    otakustay  
       Mar 6, 2014
    5万行以上js组成的系统,页面可以分类,通用性很大(比如用户列表、书列表、借阅列表、列表列表列表表单表单表单)……
    hkongm
        2
    hkongm  
       Mar 6, 2014   1
    个人看法:JS这几年太强调OO了,不适合JS本身。
    只要能完成需求,出产品,无所谓是否OO。别跟自己过不去
    hitsmaxft
        3
    hitsmaxft  
       Mar 6, 2014
    @hkongm 只能说明项目不大, 随便写写就行
    FrankFang128
        4
    FrankFang128  
       Mar 6, 2014
    一般不用继承,用构造函数加属性就好了。
    不要在写 JS 的时候想着 Java,身在曹营心在汉!
    JS 是面向对象,Java 是面向类,理念不同。
    dorentus
        5
    dorentus  
       Mar 6, 2014
    Javascript 有继承吗?
    bakac
        6
    bakac  
       Mar 6, 2014
    都是原型链上加东西而已
    arbipher
        7
    arbipher  
       Mar 6, 2014
    为什么JS面向对象很难理解,因为“继承”这种方式不是在所有的OO中都用得到的。

    OO还有基于对象clone的OO(self),有基于继承的(java),基于原型的(JS)。
    JS的“继承”和它本身的原型混杂在一起。
    Julyyq
        8
    Julyyq  
       Mar 6, 2014   1
    首先,实现JS继承的方法有很多种,不止是简单的在原型链上加东西而已。
    其次,实际应用场景在大项目中使用比较多,因为往往大项目中功能比较复杂,如果不做好代码的抽象和封装,那么你越写就感觉越“难写”,更别说将来维护你代码的人了。
    最后,举个栗子,比如一个网站中有个Search类(就像百度首页那样输入搜索内容,下面会有提示的东西),比较好的实践是Search类继承自Input类,Search类只负责“搜索”,Input类只负责“设置数据”,“获取数据”等和用户的输入值相关的操作。像这样每个类各司其职,代码的藕合度就会大大降低,扩展性也会得到非常大的提高。
    otakustay
        9
    otakustay  
       Mar 6, 2014
    @FrankFang128 无论js是什么方式的OO,他都是OO,有OO就有继承嘛,原型继承也是继承,我想楼主也没说是java的那种基于class的继承

    我认为继承还是需要的,但要有js的特色,比如社会主义……(有快递我去开下门)

    复习下,面向对象3大特性:封装性、多态性、继承性,和怎么样OO没有关系
    FrankFang128
        10
    FrankFang128  
       Mar 6, 2014
    @otakustay JS 当然是 Object-oriented,Java 倒像是 Class-oriented。
    otakustay
        11
    otakustay  
       Mar 6, 2014   1
    @FrankFang128 厄……我的概念和你不一样,我是这么认为的:
    1. JS和JAVA都是Object-oriented
    2. JS是prototype based object-oriented
    3. Java是class based object-oriented
    darasion
        12
    darasion  
       Mar 6, 2014
    没啥优势。
    反正我不用继承。
    miniwade514
        13
    miniwade514  
    OP
       Mar 7, 2014
    @otakustay ,@hitsmaxft ,@Julyyq
    看来还是在大项目中用得多,有很多要被重用的功能,就封装到类

    @hkongm ,@darasion
    我相信还是有适合使用继承的场景的,但是我经验不足导致无法拿捏

    @FrankFang128
    I wish I knew Java @_@

    @arbipher
    我一直以为JS是基于“原型”的“继承”啊,听你一说有点懵了……

    感谢各位的精彩回复!
    不过还是很期待各位分享一下对 “在哪些时候使用继承?” 的见解啊!
    miniwade514
        14
    miniwade514  
    OP
       Mar 7, 2014
    如果能举个栗子,那就更好了! 多谢
    arbipher
        15
    arbipher  
       Mar 7, 2014
    @miniwade514 我说的不准,后来也没法修改了。我的意思就是11楼。继承只是OO的一种方法。
    muyeyang
        16
    muyeyang  
       Mar 7, 2014 via iPad
    觉得Javascript用mixin比较多。继承没有什么用。

    个人以为,面向对象的核心应该是:
    1 消息
    2 委托

    消息通讯把每一对象的实现隐藏在接口之下。
    通过把复杂的功能委托给其他对象,使得每个对象只用关心自己的核心问题。
    arbipher
        17
    arbipher  
       Mar 7, 2014 via iPhone
    @muyeyang 我觉得OO的核心是 消息传递和多态。委托更像是实现技巧,或者说设计模式。
    好吧,我是来抠字眼的。
    sivacohan
        18
    sivacohan  
    PRO
       Mar 7, 2014
    先说明,js我连入门都算不上……

    似乎有这么一句话 “面向对象除了在GUI上其他方面并没有什么优势” 大概是在Unix编程艺术里面提到的

    如果js很贴近响应,那基本就没办法写什么面向对象了。各种事件什么的。

    如果做web app的话,可以把逻辑提取出来,做点抽象。如果做动画库的时候,也可以考虑抽象点东西出来。

    我现在些js的话,通常会分出这么几个类型的。models,数据类型,里面会做一些数据的过滤和绑定之类的东西。helper,简单的帮助类,不允许有人继承helper,但是helper有可能继承models。tpl,直接对应templates,这里面的东西都是一次性的了……
    miniwade514
        19
    miniwade514  
    OP
       Mar 7, 2014
    @sivacohan 看来除非写的东西已经达到了框架/库的复杂度(就像你说的动画库、和你自己实现的MVC),否则继承的运用场景确实不是很多。就我自己的经验而言,一般也就抽象到类,很少用继承再去抽象出子类什么的。
    vilicvane
        20
    vilicvane  
       Mar 7, 2014
    个人一时的观点. JS 继承用得不多的一个很重要的原因是, 不方便. 所以大家没有这个习惯. 但实际上有很多异曲同工的方法被广泛地使用了, 本质上它们的作用是一样的.
    yakczh
        21
    yakczh  
       Mar 7, 2014
    js都是实例的引用,所谓的继承就是把引用的值都复制一份,还分深浅复制,其实js实例就是个{}容器,开始把能想到的属性写上去,程序在执行的时候,需要什么再加什么就行了
    miniwade514
        22
    miniwade514  
    OP
       Mar 7, 2014
    @vilic
    @yakczh
    所以总结下来,JS是用原型链,其他一些语言用class,做的事情是一样的
    About     Help     Advertise     Blog     API     FAQ     Solana     1124 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 23:56 PVG 07:56 LAX 16:56 JFK 19:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86