网易首页 > 网易号 > 正文 申请入驻

JavaScript高级编程技巧:用JavaScript继承和扩展对象

0
分享至

如果你熟悉面向对象编程,你很可能熟悉子类(Subclassing)和继承(Inheritance)。 然而,继承得到了一个坏名声,这是因为有些开发人员在需要修改程序时将其视为一个全面的解决方案,导致class层次结构可能变得难以管理。

我们还可以使用其他设计模式来使我们的应用程序更易于理解并随时可以进行更改。下面我将向你们展示如何使用继承以及装饰器和复合模式来改进您的程序设计。

继承

继承的理念是“一个对象“是”另一个对象的专用版本”。有一个父类(也称为超类(superclass)),它定义了我们的对象的基本属性。 还有一个子类(子类(subclass))继承父类的属性。

继承的例子是:一只狗和一只贵宾犬,所有的狗都有一些特征,比如四条腿和吠叫的能力。而贵宾犬也具有这种能力所以它是一种狗。SUV是一种车辆。圆是一个形状。如果我们设计一个用于创建形状的程序,下面的图就是我们的class层次结构的样子。

拥有Shape类的好处是我们可以重用我们在其他类中定义的属性和方法。

注意‘getArea’方法在我们的每个子类中都被重新定义了。 我们不必重新定义这个方法,我们可以这样做的,以取代我们父类的方法实现,那是因为每个形状都有自己的计算面积的方法。

覆盖子类中的父方法是多态的一个例子。 多态性是对象具有多种形式的能力。 它允许子类具有与它们的超类同名的方法,可以具有不同的实现方法。

这是我们的代码,看起来像创建一个Shape和Circle子类的例子:

这种设计选择的缺点之一是,如果你决定父类需要改变,那么子类可能也需要改变,以及我们创建的所有对象。

例如,假设我们稍后决定用对象替换Shape类的x和y参数会更好。因此我们需要更改我们所有子类的构造函数以及我们实例化的每个对象的参数。

我们可以看到这很容易变成问题。 我们必须确保我们第一次得到我们的设计是正确的,这样我们才能避免做出改变。 但这不实际,也不是我们需要的。 程序是一个不断发展的实体,如果我们能够灵活地进行修改,对我们的开发人员来说更好。 至少,我们不应该有超过一层的子类。

装饰器模式

装饰器允许我们在创建对象后附加属性。这意味着我们可以添加功能而不需要子类或关注对象的实现。

我们可以使用Shape类来创建圆,并用我们想要的其他属性来包装它,而不是想一个圆是一个形状。下面是使用装饰器创建圆对象的替代方法:

我们可以使用装饰器添加或修改Shape类的成员,而不是继承它的子类。 用我们的形状的例子,你可能会发现你只是想创建一个具有所有你需要的属性的圆形对象,并为其他形状做同样的事情。没关系的,因为装饰器允许我们重用我们的Shape类中的代码,并修改它与每个形状不同的功能。所以我们将拥有更多的对象,而且更多的对象比更多的子类更容易管理。

这种模式不限于创建图形。您可以在任何想要将对象添加东西的情况下使用它。例如,我们可能有一个类来处理用户注册到我们的帐户。 在将他们的信息保存到我们的数据库之前,检查输入是否有效并且不包含任何恶意脚本这一个明智举动,我们可以用一种方法来修饰类,以便首先验证信息。 这个相同的装饰器可以在我们接受用户输入的应用程序中的任何地方重用。

复合模式

对象可以由其他对象组成。 应用程序的视图可以被认为是由其他视图组成的组件。 如果我们在制作游戏,我们的游戏世界会显示我们所创建的所有图形,如圆形和方形。 每次我们更新我们的内容时候,我们都需要重新绘制每一个元素。 我们需要一种将所有元素作为一个组来管理的方法。

这是复合模式可以帮助我们的地方。我们可以创建一个负责所有元素的类,当我们想重绘元素时,我们称这个类的绘制方法,它将调用每个单独元素的绘制方法。

一个网页也可以被认为是一个组件。 这个组件可以有一个菜单,一个侧边栏和一个博客文章。 这个帖子将是一个具有图片,标题和正文的子组件。 我们的主要应用程序组件的绘制方法将调用菜单,侧边栏和后期绘制。 帖子组件将依次调用帖子图片,标题和正文的绘制。

以下是网页分成几个部分的视图:

这种模式不限于创建视图。例如,如果我们在制作游戏,我们可能会有一个组件来管理屏幕上的元素,管理音频的组件以及管理游戏状态的组件。这些都将在我称之为游戏引擎的组件中。 游戏引擎会有一个初始化方法,它会调用每个子组件的初始化方法。 这是使用复合模式的力量。 我们可以把它们当作一个对象来处理,而不是处理个别对象。

结论

继承允许我们通过用另一个对象来定义一个对象来重用代码。 修饰器模式允许我们在不改变原始代码或子类的情况下将responsibilities添加到对象中。 复合模式模拟部分 - 整体关系,这些模式并不意味着孤立地使用。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
李溪芮的玉足美腿白皙动人

李溪芮的玉足美腿白皙动人

娱乐圈酸柠檬
2024-03-19 13:39:09
婚后老公强行要求AA,转身却把公婆接来养老,我笑了:一起AA

婚后老公强行要求AA,转身却把公婆接来养老,我笑了:一起AA

风月故事汇
2024-02-22 22:11:40
菲律宾总统:将对中国在南中国海攻击行为予以反制措施

菲律宾总统:将对中国在南中国海攻击行为予以反制措施

花尔街之狼
2024-03-28 17:51:17
女性高潮有哪些表现方式,男人请你别再骗自己了

女性高潮有哪些表现方式,男人请你别再骗自己了

皮皮讲文
2024-01-03 10:27:49
2015年8月21日,汪东兴因病在北京逝世。

2015年8月21日,汪东兴因病在北京逝世。

海梦游者
2024-03-26 17:25:47
北京沙尘持续,已严重污染!今天夜间沙尘可能还会加重

北京沙尘持续,已严重污染!今天夜间沙尘可能还会加重

鲁中晨报
2024-03-28 09:33:09
伊万刚带国足拿到执教首胜,就点燃第一把火,前马竞王牌因此入队

伊万刚带国足拿到执教首胜,就点燃第一把火,前马竞王牌因此入队

罗掌柜体育
2024-03-27 16:11:07
170cm尤物晒照惹争议,网友:财阀的玩具?

170cm尤物晒照惹争议,网友:财阀的玩具?

增肌减脂
2024-03-28 12:38:31
男人最爱的姿势 VS 女人最爱的姿势

男人最爱的姿势 VS 女人最爱的姿势

晚安少年
2024-03-27 22:45:02
【金敬迈】开除刘少奇党籍,不可怕;但全党都同意,这才可怕!

【金敬迈】开除刘少奇党籍,不可怕;但全党都同意,这才可怕!

年之父
2024-03-15 06:10:03
张雪峰谈福耀科技大学:想本科毕业找工作可以,想保研不可能

张雪峰谈福耀科技大学:想本科毕业找工作可以,想保研不可能

侃故事的阿庆
2024-03-27 17:38:45
万里挑一款美女(77)

万里挑一款美女(77)

娱乐圈酸柠檬
2024-03-20 17:22:52
11连胜+9连胜!NBA夺冠最热球队出炉,毫无弱点,赛季要结束了

11连胜+9连胜!NBA夺冠最热球队出炉,毫无弱点,赛季要结束了

条条爱侃球
2024-03-28 17:50:51
局长去世人走茶凉,全局只有女副科长去吊唁,三年后女副科成正局

局长去世人走茶凉,全局只有女副科长去吊唁,三年后女副科成正局

史论纵横
2024-03-22 10:33:21
曝42岁李晨上海遛娃!推简易婴儿车太低调,女儿正面照曝光超像爸

曝42岁李晨上海遛娃!推简易婴儿车太低调,女儿正面照曝光超像爸

小咪侃娱圈
2024-03-28 15:47:44
云南37人被扣后续,涉事门店喊冤:是他们要讹我,官方通报来了!

云南37人被扣后续,涉事门店喊冤:是他们要讹我,官方通报来了!

妮子说美食
2024-03-27 20:24:36
王传福开始放卫星:第五代DMI百公里馈电油耗2.9升,续航2000公里

王传福开始放卫星:第五代DMI百公里馈电油耗2.9升,续航2000公里

爆角追踪
2024-03-27 23:12:38
小杨哥公司被告,已立案

小杨哥公司被告,已立案

娱乐小可爱蛙
2024-03-28 02:51:49
资本捧杀女性和离婚率的疯涨

资本捧杀女性和离婚率的疯涨

枫冷慕诗
2024-03-25 20:38:16
果然爆了!一则大消息,狂掀涨停潮!中信证券,突发声明!

果然爆了!一则大消息,狂掀涨停潮!中信证券,突发声明!

中国基金报
2024-03-28 10:51:54
2024-03-28 18:34:44
webstack前端栈
webstack前端栈
WEB前端技术分享
56文章数 278关注度
往期回顾 全部

科技要闻

王传福称合资品牌份额将降到10%

头条要闻

马英九将再访大陆 台绿营怂恿他在大陆散布"台独"主张

头条要闻

马英九将再访大陆 台绿营怂恿他在大陆散布"台独"主张

体育要闻

池江璃花子:我不打算输

娱乐要闻

莱昂纳多与25岁新女友互相投喂超恩爱

财经要闻

疯狂!三个城市,三个地王!

汽车要闻

混动增程双模式 长安UNI-Z售11.79万起

态度原创

本地
亲子
时尚
数码
军事航空

本地新闻

专访|张伟潮:最年轻的龙头专职制造者

亲子要闻

已致2死106人住院?知名海淘药出事啦!这5种药,早该扔了

女团人手一副的nerd风眼镜,原来真的那么好戴!

数码要闻

三星2024新品全面开售,多重赠礼,开启AI电视新纪元!

军事要闻

乌方声称击落两枚俄"锆石"高超音速导弹 俄方未予回应

无障碍浏览 进入关怀版