这个系列主要探讨的是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中实现封装一定要注意复杂性的问题。

最新文章

  1. JS定时程序,设定一个一直刷新,又时间间隔的js,读取当前的时间并显示
  2. iOS开发中一些常见的并行处理(转)
  3. JS获得事件发出者
  4. clojure
  5. Level2行情和传统行情的区别
  6. 使用WIF实现单点登录Part III —— 正式实战 -摘自网络
  7. C#中Socket编程解决应用程序直接的通信
  8. PHP上传原理及应用
  9. Effective C++_笔记_条款11_在operator=中处理“自我赋值”
  10. Minimum Sum LCM(uva10791+和最小的LCM+推理)
  11. .NET并行处理和并发1-Threads and Theading
  12. JAVA工程师面试题【来自并发编程网】
  13. Python---字典常用方法总结
  14. Java并发:线程间数据传递和交换
  15. python3之模板pycurl探测web服务质量
  16. 解决“Connection to https://dl-ssl.google.com refused”问题
  17. 帧动画 连续播放多张图片动画 以及ui动画 SoundPool
  18. AJAX学习必备三本书
  19. 使用Fabric自动化你的任务
  20. PHP编程效率的20个要点-[转]

热门文章

  1. Linux学习之二——档案与目录的属性和权限
  2. OpenGL 学习笔记 01 环境配置
  3. Sublime Text 2 (for OS X )配置成可以运行基于python3解释器的 .py文件
  4. Excel中利用IF和TIME函数计算出上下班状态!
  5. Reading WebSites
  6. Ubuntu查看系统的信息
  7. ASP.NET网站开发中的配置文件
  8. NOIP2013普及组 T2 表达式求值
  9. 边工作边刷题:70天一遍leetcode: day 84
  10. UESTC 915 方老师的分身II --最短路变形