zoukankan      html  css  js  c++  java
  • javascript封装与多态的体现

    封装是实现面向对象程序设计的第一步,封装就是将数据与函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。

    在传统的面向对象语言中有访问修饰符,如Private:只有类本身能存取.Protected:类和派生类可以存取.Public:完全存取.

    那么在没有这些访问修饰符的javascript中是怎么实现封装的呢,请看如下代码:

    var myObject = (function () {
        var __name = 'peak';        //私有变量
        return{
            getName: function () {
                return __name;      //公开方法
            }
        }
    })();
    console.log(myObject.getName()); // peak
    console.log(myObject.__name);    //undefined

    以上是通过匿名函数立即执行来实现的,myObject返回一个对象中包含getName方法,在getName函数声明的作用域中可以访问到私有属性__name,而myObject外部环境却无法直接访问__name。

    多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

    先看一段普通的javascript代码如何渲染地图。

    var googleMap = {
      show: function () {
          console.log('Render Google Map');
      }
    };
    var baiduMap = {
        show: function () {
            console.log('Render Baidu Map');
        }
    };
    
    var renderMap = function (type) {
        if(type === 'google'){
            googleMap.show();
        }else if(type === 'baidu'){
            baiduMap.show();
        }
    };
    renderMap('google');
    renderMap('baidu');

    如上写法,假如我们需要增加高德地图,还要修改renderMap函数,往里面堆砌if条件分支语句. 十分不利于代码的复用。
    可以借助面向对象多态的思想,把程序相同部分抽离出来,升级写法如下:
    var renderMap = function (map) {
        if(map.show instanceof Function){
            map.show();
        }
    };
    renderMap(googleMap);
    renderMap(baiduMap);
    
    #现在增加一个高德地图
    var gaodeMap = {
        show: function () {
            console.log('Render Gaode Map');
        }
    };
    renderMap(gaodeMap);

    当然以上写法只是体现多态的思想,并不是说每个地图的渲染方法都是show。

  • 相关阅读:
    iOS开发 代码 或 <Home+Power>截屏
    正弦水波纹波动画
    CAGradientLayer + UIBezierPath 为视图画渐变背景色
    字符串(String)和 字符(Character)
    Python+selenium爬取智联招聘的职位信息
    用Python写一个随机密码生成器
    golang文件处理函数openfile与linux系统的文件函数的耦合
    单向列表的实现代码,以及注释解释笔记
    CLion中出现错误add_dependencies called with incorrect number of arguments解决
    c语言指针的简单实例
  • 原文地址:https://www.cnblogs.com/peakleo/p/6213944.html
Copyright © 2011-2022 走看看