javascript继承(八)-封装
这个系列主要探讨的是javascript面向对象的编程,前面已经着重介绍了一下js的继承,下面想简单的说一下js如何实现封装的特性。
我们知道面向对象的语言实现封装是把成员变量和方法用一个类包围起来,对类中变量的访问只能通过已定义的接口。封装可以算是一种信息隐藏技术,java通过private修饰符将成员变量私有化,并提供对外修改的接口,以控制类中的成员变量的访问和修改。当然在这些方法中可以对数据进行一些加工。
在前面文章已经介绍了js的属性问题,那么在js中如何实现对类的属性隐藏呢?这里封装有会有什么蔽端。
下面看一下实现封装的代码:
var Person = (function(){
//定义私有方法,相当于private方法,只能在内部访问
function hello(){
alert('hello world!');
}
return function(){
//定义私有属性,相当于private属性,只能在公有方法内部访问
var name,age;
//定义公有方法,相当于public方法,可以在类的实例中方法
this.getName = function(){
return name;
};
this.setName = function(newName){
name = newName;
};
this.getAge = function(){
return age;
}
this.setAge = function(newAge){
age = newAge;
};
this.say = hello;
this.introduce = function(){
alert('my name is :'+this.getName());
}
}
})() var p = new Person();
p.say(); //hello world
p.setName('xiaoming');
p.introduce(); //my name is : xiaoming
封装的好处这儿就不用多说了,但在js里使用一定得注意,避免过度封装。下面看一下封装对继承有没有什么影响。
代码如下:
var Person = (function(){
//定义私有方法
function hello(){
alert('hello world!');
}
return function(){
//定义私有属性,相当于private属性
var name,age;
//定义公有方法,相当于public方法
this.getName = function(){
return name;
};
this.setName = function(newName){
name = newName;
};
this.getAge = function(){
return age;
}
this.setAge = function(newAge){
age = newAge;
};
this.say = hello;
this.introduce = function(){
alert('my name is :'+this.getName());
}
}
})() Person.prototype.call = function(){
this.say();
} var Student = function(){
Person.call(this);
}
for(var i in Person.prototype){Student.prototype[i] = Person.prototype[i]} var s = new Student();
s.setName('xiaoli');
s.getName();//xiaoli
s.call();//helloworld
可以看到Student类继承了Person类,获得了Person类的公有方法和共有方法即prototype定义的方法。由于JavaScript并不原生支持封装,所以在JavaScript中实现封装一定要注意复杂性的问题。
javascript继承(八)-封装的更多相关文章
- JavaScript “类”定义 继承 闭包 封装
一.Javascript “类”: 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一 ...
- JavaScript 继承 封装 多态实现及原理详解
面向对象的三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...
- javascript继承笔记
//原型(prototype):原型是一个对象,其他对象可以通过它实现属性继承 /*笔记: * 1.类式继承:通过原型链继承的方式 * 2.原型式继承:对类式继承的封装 * 3.寄生式继承:对原型继承 ...
- javascript继承机制的设计思想(ryf)
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- JavaScript继承
最佳的继承范式 寄生组合继承 我们来看一下它的实现方式: function Object(o){ var TempObject = function(){}; TempObject.prototype ...
- [原创]JavaScript继承详解
原文链接:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...
- 【JavaScript】重温Javascript继承机制
上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...
- 转:Javascript继承机制的设计思想
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- 理解JavaScript继承
原文:理解JavaScript继承 对于JavaScript的继承和原型链,虽然之前自己看了书也听了session,但还是一直觉得云里雾里,不禁感叹JavaScript真是一门神奇的语言.这次经过Sp ...
随机推荐
- dw websites
http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimens ...
- NOIP2010普及组 三国游戏 -SilverN
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...
- 离散化+线段树 POJ 3277 City Horizon
POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...
- 第20章 DLL高级技术(2)
20.3 延迟载入DLL 20.3.1延迟载入的目的 (1)如果应用程序使用了多个DLL,那么它的初始化可能比慢,因为加载程序要将所有必需的DLL映射到进程的地址空间.→利用延迟加载可将载入过程延伸到 ...
- Win8/8.1 .NET3.5安装失败
.NetFramework 作为开发人员,很多情况都需要.NetFramework,在Win7及之前的系统上直接双击 .NetFramework的安装包就可安装了. Win8/8.1无法安装.Net3 ...
- Eclipse去除JavaScript验证错误
这篇文章主要是对Eclipse去除js(JavaScript)验证错误进行了介绍.在Eclipse中,js文件常常会报错.可以通过如下几个步骤解决 第一步: 去除eclipse的JS验证: 将wind ...
- java10-2 toString()方法
public String toString():返回该对象的字符串表示. Integer类下的一个静态方法: public static String toHexString(int i):把一个整 ...
- AFN框架基本使用
0.AFN框架基本使用 0.1 AFN内部结构 AFN结构体 - NSURLConnection + AFURLConnectionOperation(已经被废弃) + AFHTTPRequestOp ...
- bean的作用域
bean的作用域为singleton,spring容器中只存在一个bean的实例,所有对该bean的请求只返回同一个bean实例. 当bean的作用域为prototype时,每一次对bean的请求,都 ...
- JqueryMobile入门基础附源码下载
最近要做一个手机版的网站,所以就了解了一点JqueryMObile,下面是我整理的笔记,现在分享给大家,希望朋友们喜欢,先给个首页看看吧!!! 一.JqueryMobile基本页面结构 <!DO ...