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. 《算法竞赛入门经典》5.12TeX括号

    /* *在TeX中,左双引号是``,右双引号是''.输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式. *样例输入:"To be or not to be,"quoth ...

  2. Map的遍历

    @Test public void test() { Map<String,String> usersmap = new HashMap<>(); usersmap.put(& ...

  3. BroadcastReceiver的最简单用法

    android系统下的广播: 电池电量低.电池充电完成.短信到来了.程序安装卸载.sd卡卸载安装 等 BrocastReceiverDemo.java public class BrocastRece ...

  4. json_decode 与 json_encode 的区别

    1.json_decode对JSON格式的字符串进行编码 2.json_encode对变量进行 JSON 编码 3.unset()是注销定义的变量 4.urlencode()函数原理就是首先把中文字符 ...

  5. FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火

        注:吴翰清——中国网络安全圈最具影响力的人物之一.西安交大少年班毕业,大学期间创办民间组织幻影,阿里巴巴集团最年轻的高级安全专家,创新工场安全宝任联合副总裁,热门公众微信“道哥的黑板报”幕后作 ...

  6. Ubuntu 14.10 下grep命令详解

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  7. 0911 Socket网络编程

    1.实现ftp上传.下载功能 1.1 循环接收数据直到接收完毕 server端接收client发送的命令(比如说ifconfig),然后server端将命令执行结果反馈给客户端,这时候有个问题,ser ...

  8. HTML的盒子模型

    每个HTML元素都可以看作一个装了东西的盒子,盒子具有宽度(width)和高度(height),盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框 ...

  9. linux命令:mv

    1.命令介绍: mv是move的缩写,用来移动文件或重命名文件 2.命令格式: mv [选项] 源文件 目标文件 3.命令参数: -b :若需覆盖文件,则覆盖前先行备份. -f  --force:fo ...

  10. C#使用指针表达式

    如何:获取指针变量的值 使用指针间接运算符可获取位于指针所指向的位置的变量. 表达式采用下面的形式,其中, p 是指针类型: *p; 不能对除指针类型以外的任何类型的表达式使用一元间接寻址运算符. 此 ...