javascript大神修炼记(7)——OOP思想(多态)

  读者朋友们大家好,今天我们就接着前面的内容讲,前面我们已经讲到了继承,今天我们就来讲OOP目前最后一个体现,那就是多态,因为javascript语言的灵活性,所以我们是没有办法使用接口的,所以这也给js程序带来了一定的困惑,大家也不用太着急关心这个问题,因为这些到后面ECMAScript后面的版本会给我们解决这些问题的,又扯远了,还是回到正题,OOP的多态,前面我们已经可以很明白的理解继承是什么样子的了,就是先声明一个父类,然后,我们可以写很多的子类来继承父类的属性和方法,这些我们就可以用最少的代码量,实现了与父类一样的功能,这就是继承。马上就有同学提出疑问:前面的继承我看了很久,也能有理解,但主是不知道有什么用,为什么我们要去写那么多的继承类?这个问题,立马切中要害,问得相当的关键,如果没有多态的存在,我们先前所说的继承还真没什么用,因为我们所有的继承类都是一模一样的复制,没有什么特点。举个例子:

我们可以很明显地就看出问题来了,熊猫A,熊猫B与父类的熊猫完全一样,虽然,我们可以很轻松写很多个子类来,但是,这并没有什么用,我们就直接使用父类的属性和方法,就能达到我们的目的,对,这样说,感觉OOP的继承没有什么用了,前面我们才学到的知识,不会就这样浪费了吧,哈哈,不要怕,前面只要只是你所学到的东西,完全没有白学,下面我们就来讲继承的补充,多态,看示例图:

不管是人类,还是其他动物,不断的繁衍,不断的进化,每一个后代看似一样,其实又不一样,或多或少都有自己的独特的属性或者行为,现在熊猫A在某种特别的情况下学会了洗澡,它有自己的卫生属性,而熊猫B是个高手,学会了泡妞(大爷的,老子都没学会,它学会了),它有了自己的魅力属性,这样我们就可以很清晰看出来,当我们需要写一个子类来继承父类的时候,它一定是具有和父类相同行为或者属性而且还一定具有自己独特的行为或者属性,这样我们就省去了相同行为或者属性的代码编写(OOP思想带来的好处再一次被体现),下面我们来看实例代码:

//遗传继承函数
function Extend(Children,Parent){
    for(var p in Parent){
        if(typeof Children[p] == "undefined"){
            Children[p] = Parent[p];
        }
    }
}

//熊猫父类
function Panda(){
    //颜色
    this.color = "黑色交错";
    //健康值
    this.health = 100;
    //可爱值
    this.lovely = 80;
    //年龄
    this.age = "3岁";
}
//吃
Panda.prototype.Eat = function(){
    console.log("吃竹子");
}
//拉
Panda.prototype.Shit = function(){
    console.log("拉了一坨翔");
}
//睡
Panda.prototype.Sleep = function(){
    console.log("美美地睡了一整天");
}
//交配
Panda.prototype.Mating = function(){
    console.log("熊猫的爱爱也是为了下一代嘛");
}

//熊猫A
function Panda_A(){
    //讲卫生度
    this.lovehealth = 60;
   
    Extend(this,new Panda());
}
//洗澡
Panda_A.prototype.Bath = function(){
    console.log("为了不生病,就得讲卫生,我去洗澡了");
    //洗一次澡,讲卫生程度 + 1
    this.lovehealth += 1;
}

//熊猫B
function Panda_B(){
    //魅力值
    this.charm = 90;
   
    Extend(this,new Panda());
}
//泡妞
Panda_B.prototype.GetGirls = function(){
    console.log("为了族群的繁荣,我就先去泡妞去了,谁叫我的魅力这么高呢?");
    //泡一次妞,魅力值 - 1
    this.charm -= 1;
}下面我们看一看示例,是不是跟前面描述的一样?

不管是父类的实例,还是子类的实例,都能正常的使用父类(共有)的属性及行为函数,下面再来看看特有的呢?

再来大家最关心的那个行为还没测试,就是熊猫B可以泡妞,不再调大家的口味了,立马测试

能过上面的示例,我们已经知道多态是怎么一回事了,现在又有同学发问了:前面我们已经可以实现多态了,只是看到多了一些特有的属性和行为,那么可不可以改变一些原有属性及行为呢?因为要模拟对象,我们就要做到尽量相同的模拟,就像,如果还有一个熊猫C类,他们进化得更高级了,已经不用吃竹子了,居然学人开始吃饭了:

//熊猫C
function Panda_C(){
   
    Extend(this,new Panda());
}
//吃
Panda_C.prototype.Eat = function(){
    //吃饭
    console.log("我们要进化得比人类更高级,所以我们就开始吃饭了,不再吃竹子!!");
}

看到了吧,只要是与父类已经不相同的属性或者行为,我们都可以通过重写的方式来进行覆盖,从而实现子类变态的特殊要求。

  总结一下,今天我们就补充前面继承的思想,从而实现了多态的模拟,OOP思想,我们也先就告一段落,相信大家已经对OOP有了自己的认识,就是把代码模拟成对象来进行编写,这样有两个好处:1、把代码的重用率提高了,提高了工作效率。2、代码已经被模拟在对象,这样有条理代码方便了我们管理,和后期维护及扩展。

时间: 2024-10-07 06:33:51

javascript大神修炼记(7)——OOP思想(多态)的相关文章

javascript大神修炼记(2)

读者朋友们好,前面我已经大概的了解了Javascript的作用以及一些基本的函数声明与变量声明,今天我们就接着前面的内容讲解,我们就来看一下javscript的逻辑(正序,分支,循环)以及一些简单的运算符 下面我们就来讲一些简单的操作运算符 + 加号:1.用来计算两个数字相加之和,2.用来拼接两个字符串- 减号:1.用来计算两个数字相减之差,2.用在一个数字前面来标识成一个负数* 乘号:用来计算两具数字相乘之积/ 除号:用来计算被除数除以除数后,所得的商% 取余:用来计算被除数除以除数后,所得的

javascript大神修炼记(4)——循环

读者朋友们大家好,今天,我们继续接着前面的内容讲,前们我们已经讲了条件分支,今天我们就讲循环,顾名思义就是,重复执行相同的操作,正常循环是受程序控制的,不正常的情况,就会出现死循环,那就是我们的代码中出现bug,那样,我们还要学会调式bug,等我们先把基础知识讲完了之后,我还会专门用篇幅来讲解浏览器里面的调试,那种程序就会在我们掌控之中,这才是我们想要结果. 循环包括的结构体有 for , while , do--while,for循环有两种形式的存在,一种是数字变量变化所引起的循环,另一种就是

兄台息怒,关于arguments,您的想法和大神是一样一样的----闲聊JS中的apply和call

JavaScript提供了apply和call两种调用方式来确定函数体中this的指向,表现出来的特征就是:对象可以'借用'其他对象的方法.之前的几篇博客回顾了一些Web控件的一些开发方法,我们聊了如何实现一个自定义的组合框,也聊了一个相对复杂一点的地址控件的开发,从上一篇开始,开始聊一些JavaScript语言本身的话题,回顾了闭包和原型继承,今天我们就一起来聊聊apply和call这两种调用方式的前世今生.当然,尽管主题在变,但是基于业务场景来剖析理论知识的写作风格不会变.我们还是从一个生活

JavaScript框架设计---大神的框架研究笔记

原本是想买一本教如何去写一个js框架的书的,这本书完全是正美大神的框架源码阅读笔记,看的我这个非专业前端很是乏力,经常几个框架间跳来跳去,一下子就跟丢了,只能默默为自己的前端功力掩面.后来就本着了解和欣赏的态度去看,这样就好多了.  还是谈谈我看这本书的收获吧  1.大神们写代码真是惜墨如金.  2.底层API原来还有这么多,JavaScript高级编程,JavaScript权威指南都没讲完.  3.兼容性神马的IE这么多,也不单只有IE,FF,chrome都有兼容性问题.Jquery这些前端框

记大神的一次反汇编

首先解压,在assets文件夹下在找到了要汇编的文件:appmgr.jar,这个文件在安装后在/data/data/<package name>/files/文件夹下会生成一个appmgr.apk, 其实只是一个存放代码的资源文件,安装的时候重命名了,以apk结尾罢了. 解压这个jar文件,得到classes.dex,拖到IDA Pro 6.1以上版本里面去,可以识别成Android的dex文件. 鉴于要找signature_md5的算法,用alt+t查找「signature_md5」字符串,

大神手把手教你写一个页面模板引擎,只需20行Javascript代码!

只用20行Javascript代码就写出一个页面模板引擎的大神是AbsurdJS的作者,下面是他分享的全文,转需. 不知道你有木有听说过一个基于Javascript的Web页面预处理器,叫做AbsurdJS.我是它的作者,目前我还在不断地完善它.最初我只是打算写一个CSS的预处理器,不过后来扩展到了CSS和HTML,可以用来把Javascript代码转成CSS和HTML代码.当然,由于可以生成HTML代码,你也可以把它当成一个模板引擎,用于在标记语言中填充数据. 于是我又想着能不能写一些简单的代

细节值得一提、性能可见一斑------大神F1极速版试用记

近年来,国产手机呈现了迅猛发展的态势,新品不断脱颖而出,而且无论是性能还是外观,都达到了相当高的水准.且不说1500到2000这个价格区间,就是在1000以内,也有很多不错的产品可供大家选择,在这种背景下,高性价比的国产手机无疑成了消费者的明智之选. 以最近上市的大神F1极速版为例,这款产品定价699元,主打平民消费市场.单从价格上看,大神F1极速版瞄准了红米2,不过,无论是外形做工还是内在性能,这款产品都值得一提.在到手之后,小编便迫不及待的试用了一番,接下来,我们不妨来看看大神F1极速版究竟

跟随前端大神的脚步

1. 大神 寻找Github.微博.知乎等技术社区上比较活跃.影响力大的圈内大神,供大家膜拜! 视野所限,未必全面,欢迎大家推荐.自荐. 排名不分先后,序号只为标记方便. 提供信息只为学习交流之用,如有冒犯,请见谅:如果涉及隐私或不愿公开内容,请联系我. 1.1 国际 Chris Coyier Codepen创始人,css-tricks站长. 联系方式: CodePen. Dribbble. Twitter. GitHub. Instagram Sara Soueidan 2015 net aw

最近学到的知识概述,求大神指点后续的路该怎么规划

求大神指导迷津: 前端的路,已经走了一年多了,从懵懂地编码到现在的熟悉的操作,学会使用了svn.git.webstrom这些版本控制和开发软件,尤其是当学会用webstrom进行git提交代码时,才很惊喜的发现,学会使用好用的工具可以节省很多时间,大大提升工作的效率![工具很重要]. 在搭建好的框架下,去开发设计好的网页图,对我来说都是没问题的了,前段时间,在没有人指导的情况下,自己摸索着在现有的框架下,调用ztree完成一个功能,包括API接口该如何设计.保存后如何向后台传数据.[自学能力在成