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. 向MySql中插入中文时出现乱码

    这个因为字符集编码问题.在连接字符串中加上CharSet=gbk

  2. 数列F[19] + F[13]的值

    已知数列如下:F[1]=1, F[2]=1, F[3]=5,......,F[n] =F[n-1] + 2*F[n-2],求F[19] + F[13]? #include <stdio.h> ...

  3. 单位服务器发布tomcat的项目外网访问

    首先 要有 外网IP  路由器做设置  开放端口(netstat -nao) 首先你要确定你有一个外网ip地址.如果你分配到的是一个局域网IP地址需要经过一系列的转换为外网ip地址 跟部署tomcat ...

  4. UITableViewCell 单元格样式

    UITableViewCell 单元格样式作用 typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefau ...

  5. 黑马程序员——OC语言Foundation框架 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)结构体 NSRange(location length) NSPoi ...

  6. BT3入门之中文语言支持

    汉化: 1.更新软件库:apt-get update 2.安装中文语言包:apt-get install language-support-zh   apt-get install language- ...

  7. 腾讯PK微软 王者之战一触即发

    六一儿童节,曾在微信中热闹一时的智能机器人“小冰”被腾讯封杀.一场微软和腾讯的战争正式拉开帷幕.前者是PC时代的霸主,后者是中国移动互联网的王者.在此之前,类似的战争,腾讯曾经历无数次,从十年前的“珊 ...

  8. 一道面试题,简单模拟spring ioc

    自己实现的,程序写的土了点,很多情况没去考虑,主要是复习理解怎么使用反射来实现spring 的依赖注入. package dom4jtest; import java.lang.reflect.Inv ...

  9. HTML--3css样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/    此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控 ...

  10. 关于java的static语句块

    声明:转载请注明出处 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次 ...