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');
可以借助面向对象多态的思想,把程序相同部分抽离出来,升级写法如下:
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。
javascript封装与多态的体现的更多相关文章
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- javaScript封装的各种写法
在javascript的世界里,写法是个神奇的现象,真是百家齐开放啊!每次看到老外写的js组件,思想和写法都怪异,就没看到一个js结构基本相同的代码出来.今天,我就来谈谈js写法,我在开发过程中,也写 ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Java的继承、封装与多态
Java的继承.封装与多态 基本概念 面向对象OO(Object Oriented):把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象. 对同类对象抽象出共性,即类. 比如人就是一个类 ...
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- 第32节:Java中-构造函数,静态方法,继承,封装,多态,包
构造函数实例 class Cat{ // 设置私有的属性 name private String name; // 设置name的方法 public void setName(String Name) ...
- 面向对象的JavaScript --- 封装
面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
随机推荐
- C#设计模式系列:简单工厂模式(Simple Factory)
1. 简单工厂模式简介 1.1 定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又 ...
- CSS3 Media Queries实现响应式布局
概念我就不在这里写啦.大家可以看看以下网页: http://www.runoob.com/cssref/css3-pr-mediaquery.html http://www.w3cplus.com/c ...
- Eclipse迁移到Android studio步骤如下:
一.从Eclipse中导出:1.将你的ADT插件版本升级到22.0以上.2.在Eclipse中,选择File-->Export.3.在弹出的导出窗口中,打开Android的文件夹,选择“Gene ...
- IOS数据存储之NSUserDefaults
前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDe ...
- ASP.NET Core的配置(4):多样性的配置来源[下篇]
我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...
- AngularJS之代码风格36条建议【一】(九)
前言 其实在新学一门知识时,我们应该注意下怎么书写代码更加规范,从开始就注意养成一个良好的习惯无论是对于bug的查找还是走人后别人熟悉代码都是非常好的,利人利己的事情何乐而不为呢,关于AngularJ ...
- mysql default unix_timestamp(now())
按照mssql的创建方式,去创建mysql的默认值时间戳是不能被允许的,例如下面代码: CREATE TABLE USERINFO( CREATETIME INT NOT NULL DEFAULT U ...
- 开发中 常用 js 记录(一)
(1)获得URL参数 function GetQueryString("url参数名") { var reg = new RegExp("(^|&)&qu ...
- 解决 android 高低版本 webView 里内容 自适应屏幕的终极方法
转载请声明出处(http://www.cnblogs.com/linguanh/) 一,先说下我的情况,大家可以对号入座(嫌无聊请跳过) 我的项目要求是这样的,先从数据库里面拿出来html标签,因为加 ...
- 记一次由于Java泛型类型擦除而导致的问题,及解决办法
中所周知,Java中的泛型并不像C++.C#一样是真正的泛型,其泛型是通过类型擦除来实现的.具体什么是类型擦除,可以参看这篇博文:http://icyfenix.iteye.com/blog/1021 ...