昨天讲了面向对象的继承,今天我们来谈谈多态和封装吧!

多态polymorphism

抽象讲法解释,就是使用单一界面操作多种型态的物件

继承父类别,定义与父类别中相同的方法,但实作内容不同,称为复写(override)。

我们昨天已经确定了JS是用原型继承的方式实作面向对象继承的抽象概念。

上面我们也有说明了多态的定义,那要JS要怎么实作呢(gzanqifood)?

假设今天我们要创立一个角色,有魔法师和剑士两种职业,所以我们会把一些角色的基本设定写在父类别,角色的差异则会在子类别设定。

function Role(name,blood){

this.name = name ||“”;

this.blood = blood ||“”;

}

function SwordMan(name,blood){

Role.call(this,name,blood);

this.fight =“挥剑攻击”;

}

function Magician(name,blood){

Role.call(this,name,blood);

this.fight =“火球术!”;

this.cure =“治疗!”

}

SwordMan.prototype = new Role();

Magician.prototype = new Role();

var sword = new SwordMan(“剑士”,200);

var magic = new SwordMan(“魔法师”,100);

可以看到说,虽然sword与magic都有name与blood,但会发现显示出来的不一样,这是因为我们继承了Role所以在复写时候才能显示不一样,而不是只会统一显示。

所以可以这样说,JS透过「原型继承」的方式达成多态的override实作。

如果我们用类别继承来实作的话。

public class Role{

privite String name;

privite int blood;

public int getBlood(){

return blood;

}

public String getName(){

return name;

}

}

public class Magician extends Role{

public void fight(){

System.out.println(“火球术!”);

}

public void cure(){

System.out.println(“治疗!”);

}

}

public class SwordMan extends Role{

public void fight(){

System.out.println(“挥剑攻击!”);

}

}

封装

封装的目的是要隐藏实作的细节,只让抽象的界面暴露出来,使用者只需要知道界面就好。

举个例子来说,我们在利用时间方法Date()时候,我们不需要知道他是怎么实作的,只需要知道使用它可以得到一个时间的字串值。

但是JS本身并没有提供像JAVA语言的privite私有成员的方法,只能利用「闭包」来达到类似封装的概念。想知道闭包的话可以回去看DAY19喔!

所以严格来说,JS不是面向对象的语言!

今天就到这边,明天会带各位一步一步了解原型继承,一样如果有未附上来源及错误欢迎留言指正(ruisente)!

学JS的心路历程-JS支持面向对象?(二)的更多相关文章

  1. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  2. 学JS的心路历程-函式(二)arguments

    参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函 ...

  3. 学JS的心路历程 - JS应用

    各家电商网站都推出了各种活动和现今优惠券,当时在逛PTT时看到了有篇文章,提供代码教大家用JS的方式抢票,看了一下后发现好像很多人好奇这是怎么做的,于是就想说想一篇文章来讲解一下. 我们先来看一下折价 ...

  4. 学JS的心路历程 - JS的Class

    没错,你没有看错,虽然前面说JS是原型继承,但在ES6以后新增了class关键字!!! 不过底层实作仍然是以原型继承方式进行,所以基本上算是一个语法糖. 今天我们就来看一下如何使用吧! class 首 ...

  5. 学JS的心路历程-物件与原型(一)

    前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype r ...

  6. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  7. 学JS的心路历程Day26 - PixiJS -入坑

    后来知道也可以透过canvas让网页动起来! 而PixiJS是使用WebGL在canvas上绘制内容与制作动态 且同时有下列特色: 支持多点触控 掩码与混合模式 可外加WebGL滤镜 多装置支持 等等 ...

  8. 学JS的心路历程-物件与原型(三)

    昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...

  9. 学JS的心路历程 -物件与原型(二)

    昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...

随机推荐

  1. Linux性能优化 第八章 实用工具:性能工具助手

    8.1性能工具助手 Linux有丰富的工具,这些工具组合来使用会更加强大.性能工具也一样,单独使用虽然也没有问题,但是和其他的工具组合起来就能显著提高有效性和易用性. 8.1.1 自动执行和记录命令 ...

  2. Fragment onActivityResult提前响应,startActivityForResult执行后立即响应onActivityResult的解决方法

    找不到病根真是让人愁白了头: 今天写了一个startActivityForResult,开启一个Activity并拿到返回的结果,但是startActivityForResult刚走,onActivi ...

  3. Java捕获异常的问题

    ---恢复内容开始--- 在Java编译过程中,有时候会出现输入未按照规定输入的情况,此时需要警告用户输入错误,这就会是程序运行过程中出现异常.异常就是可预测但是又没办法消除的一种错误.所以在编写过程 ...

  4. 运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist

    第一步:在管理员命令中输入: mysql_upgrade -u root -p --force 第二步:关闭并重启数据库 service mysql stop service mysql start

  5. angularjs的ng-class

    <!--第一种 直接加变量--> <div ng-class="tempClass"></div> <!--第二种 用{{}} 包住的变量 ...

  6. isNAN的使用方法及介绍

    NaN为 Not a Number isNaN()函数在接到一个值后,会尝试将这个值转换为数值. alert(isNaN(NaN)); //true alert(isNaN(25)); //false ...

  7. 搜狗输入法在Ubuntu下突然不能输入中文

    使用搜狗输入法在Ubuntu下突然不能输入中文,这种情况出现多次,先找到一个快捷的解决方案: 首先要知道遇到这种情况的很大可能原因是bin目录里文件过多,系统加载不完全,你就算上面的脚本执行3次都不行 ...

  8. appium 搭建及实例

    一.Appium环境搭建(Java版本) 转载2016-04-26 09:24:55 标签:appium移动端自动化测试 市场需求与职业生涯的碰撞,阴差阳错我就跨进了移动App端自动化测试的大门,前生 ...

  9. 动态参数(*args,**kwargs),命名空间和作用域,global和nonlocal,函数的嵌套

    1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...

  10. MySQL字符集及校对规则的理解

      阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对 ...