1、封装:把实现一个功能的代码放在一个函数中封装起来,以后再想实现这个功能的时候,我们不需要重新的编写代码了,只需要执行对应的函数即可,我们把这种机制就称之为"函数的封装"-->低耦合高内聚:减少页面中的冗余代码,提高代码的重复使用率
    function fn(){
       //实现功能的代码
    }
    fn();
    fn();
 
2、多态:
后台语言[java、C#、ASP.net、php...]中的多态:重载、重写
重载(Reload):多个方法,方法名相同,参数的个数或者参数的类型不一样
重写(Rewrite):子类重写父类的方法
1)JS中如果函数名相同了,后面的会把前面的函数给覆盖掉,所以JS中不存在重载
    fn(); ->2
    functionfn(){console.log(1);}
2)JS中的多态指的是一个方法的多种形态:一个方法,我们通过传递进来的参数值的不一样,实现不一样的功能
   //根据传递的n和m的值不一样,我们获取的结果也不一样,例如:如果执行的时候不传递任何的参数,返回[0-1)之间的随机小数,如果传递了两个值1/10,返回的是[1-10]之间的随机整数
    functiongetRandom(n,m){
       n=Number(n);
       m=Number(m);
       if(isNaN(n) || isNaN(m)){
           returnMath.random();
       }
       if(n>m){
          n=m+n;
          m=n-m;
          n=n-m;
       }
       return Math.round(Math.random()*(m-n)+n);
    }
 
3、继承:
JS中常用的继承有以下几种方式(子类想要继承父类中的属性和方法)
1)原型继承(我们项目中最常用的一种继承方式)
  A、子类的原型指向父类的一个实例即可->原理不是把父类中的方法直接的继承复制过来一份,而是通过原型链的查找机制一级级的向上查找使用的(参考图"原型继承.png")
  B、原型继承是把父类中私有和公有的属性和方法都当做子类中公有的
 C、子类可以通过原型链的查找机制把父类原型上的属性和方法进行添加、修改、删除,如果这样操作完成后,我们父类的其他实例都会受到影响->子类重父类的方法->类的重写,例如:                                                    c.__proto__.__proto__.getX=function(){} 相当于子类重写了父类原型上的公有的方法
    function Parent(){this.x = 100;}
    Parent.prototype.getX =function () {console.log(this.x);};
    function Children(){this.x = 200;}
    Children.prototype = newParent;
    var c = newChildren;
 
2)call继承
 A、在子类的函数体中,把父类当做一个普通的函数执行,让父类执行的时候里面的this变为子类的一个实例,这样就相当于直接的给子类的实例增加私有的属性和方法
 B、call继承只能继承父类私有的属性和方法,而且继承过来后也是子类实例自己私有的
  C、call继承是直接的把父类中的私有属性和方法相当于克隆一份直接的给子类
    function Parent(){this.x = 100;this.writeX = function () {}}
    Parent.prototype.getX =function () {console.log(this.x);};
    function Children(){
       //this->Children的实例c
       Parent.call(this);//把Parent当做普通的函数执行,让里面的this变为c->在执行的时候相当于c.x=100、             c.writeX=function...
    }
    var c = newChildren;
    var d = newChildren;
    console.log(c.writeX ===d.writeX);//-->false
 
 
3)冒充对象继承
 A、在子类的函数体中,我们创建一个父类的实例,然后把这个实例当做一个普通的对象进行遍历,在每一次遍历的时候,把父类中私有/公有的属性和方法,都当做子类实例的私有属性和方法进行存储
  B、父类的私有和公有都可以继承,而是是相当于复制了一份继承过来的
  C、继承过来的都是子类实例私有的属性和方法
    function Parent(){this.x = 100;this.writeX = function () {}}
    Parent.prototype.getX =function () {console.log(this.x);};
    function Children(){
       var temp=new Parent();
       //temp就是Parent的一个实例:x、writeX、getX
       for(var key in temp){
          this[key]=temp[key];
       }
       temp=null;
    }
    var c = newChildren;
    var d = newChildren;
    console.log(c.getX ===d.getX);
 
4)混合模式继承
  原型继承和call继承/冒充对象继承,任意一个组合到一起来实现的,一般来说都是和call继承组合
   function Parent() {
     this.x = 100;
     this.writeX = function () {}
   }
   Parent.prototype.getX =function () {
     console.log(this.x);
   };
   function Children(){
     Parent.call(this);
   }
   Children.prototype = newParent;
   var c = newChildren;

如转载请标明出处

来自珠峰培训http://www.zhufengpeixun.com/

JavaScript----函数的封装、继承和多态的更多相关文章

  1. day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

    Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...

  2. C++之封装继承和多态

    C++中非常重要的概念,尤其是相对于C语言而言,也是其具有如此高的工程使用性的重要原因. 封装 所谓封装是将某些东西隐藏起来,让外界无法直接使用,而必须通过某些特定的方式才能访问.也即是,将抽象得到的 ...

  3. objective-c自学总结(三)---面向对象的封装,继承与多态

    面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...

  4. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  5. Java的封装继承和多态

    封装 定义:属性私有private:get/set 目的 提高程序的安全性,保护数据 隐藏代码的实现细节 统一接口 提高系统的可维护性 代码 public class Student { //名字 p ...

  6. java封装继承以及多态(含代码)

    封装 该露的露,该藏的藏 我们常需设计要追求,"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成.不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用. 封装(数据的隐藏) ...

  7. JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档

    作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...

  8. javascript面向对象编程,带你认识封装、继承和多态

    原文链接:点我 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了 ...

  9. 浅谈JavaScript的面向对象和它的封装、继承、多态

    写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样, ...

  10. JavaScript 面向对象程序设计(下)——继承与多态 【转】

    JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...

随机推荐

  1. MSMQ消息队列

    MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一 ...

  2. LCD驱动 15-3

    测试:1:make menuconfig去掉原来的驱动程序    Device Drivers  --->             Graphics support  --->      ...

  3. Problem B 队列

    Description Two bored soldiers are playing card war. Their card deck consists of exactly n cards, nu ...

  4. Unity安卓连接profile调试

    通过USB ADB 1.从Unity中Export Android 工程的时候一定要勾选 Development Build,autoconnect profiler 2.cmd进入adb的目录(打开 ...

  5. MySQL数据库远程连接

    12.00 MySQL数据库远程连接 参考: http://www.jb51.net/article/24508.htm http://www.linuxdiyf.com/viewarticle.ph ...

  6. [微软]technet与msdn

    我们搜索一个微软术语,有时定位到technet页面,有时定位到msdn页面.我直观的理解就是technet教人们如何使用微软产品,而msdn指导人们如何开发基于微软产品的软件.那么微软对它们具体定位是 ...

  7. hadoop 常见问题

    1.Eclipse 读取hdfs文件错误:  java.io.IO Exception : Could not obtain block: blk_194219614024901469_1100 fi ...

  8. hdu 2053

    Ps:找规律题....凡是平方数都是开...WA了一次..数组给的太小?...后来给到3000..就AC了 代码: #include "stdio.h"long long dp[3 ...

  9. 我与python3擦肩而过(二)—— csv文件头哪去啦?

    在看Python Data Visualization Cookbook 这本书(基于python2),开始时读取csv文件头的时候出现问题.查了资料,又是python3的问题,从这个链接找到答案. ...

  10. HDOJ-三部曲-1002-Etaoin Shrdlu

    ContestsProblemsRanklistStatusStatistics Etaoin Shrdlu Time Limit : 2000/1000ms (Java/Other)   Memor ...