面向对象的Javascript:封装
来源:互联网 发布:手机网络掩码怎么设置 编辑:程序博客网 时间:2024/06/11 00:14
转载请注明出处:http://www.3body.tk/iblog/
Javascript是一门基于对象的语言,而不是面向对象。所以面向对象特有的一些概念在Javascript并不具备。但是我们可以通过Javascript语言提供的其他特点辅助实现面向对象编程。
本文讲述如何在Javascript中实现面向对象编程的特性之一–封装
首先来看一个基本的Javascript Class:
var Lily = function() { this.name = "lily"; this.age = 14; this.speak = function(something) { alert("lily:" + something); }; };
上面定义了一个简单的Class,名字为Lily,类中包含了Lily同学的姓名,年龄,和她具有的一个行为–说话。我们再根据Lily这个Class创建出一个对象:
var lily = new Lily(); document.write("lily's name is " + lily.name); document.write("lily's age is " + lily.age); lily.speak("hello world");
可以看出,由于Javascript本身不具备定义public,private,protected这些面向对象语言(比如Java)特有的隐藏/公开信息的声明特性,所有的属性,方法都是public的。那如何才能让Lily把自己不想公开的信息隐藏起来呢,比如这位MM的年龄?
想一下?在Javascript中如果将一个变量作为局部变量定义在方法内部,那么这个局部变量对于方法外的其他域来说是不可访问的。这个概念跟面向对象方法中的private声明看上去是不是有些类似。刚好在Javascript中我们定义一个Class也是用Function来实现,那么如下:
var Lily = function() { var age = 14; this.name = "lily"; this.speak = function(something) { alert("lily:" + something); }; };
这样Lily的年龄就是个秘密了。可是万一过了一年,Lily同学的学校要将所有的同学年龄加上一岁,可是Lily的年龄由于谁都不知道(除了她自己),学校应该怎么办呢?这时候Lily 为了不暴露自己的年龄,便主动跟学校说,你什么时候要把年龄加一就告诉我一下,我自己加就行~~
var Lily = function() { var age = 14; this.name = "lily"; this.speak = function(something) { alert("lily:" + something); }; this.ageUp = function() { age ++; }; };
一年一年过去了,马上就要毕业了,同学们对Lily的年龄十分好奇,想你看上去挺年轻的啊,怎么不敢将年龄告诉大家呢,难道是个装嫩的阿姨?Lily同学听说后不淡定了:
var Lily = function() { var age = 14; this.name = "lily"; this.speak = function(something) { alert("lily:" + something); }; this.ageUp = function() { age ++; }; this.getAge = function() { return age; } };
说你们谁爱看谁看呗。人家是怕太年轻吓到你们咯~~
当然,Lily同学也经常有些小动作,比如偷偷的唱个生日歌什么的,就不足为外人道了,
var Lily = function() { var age = 14; this.name = "lily"; var sing = function(song) { // sing a song }; this.speak = function(something) { alert("lily:" + something); }; this.ageUp = function() { sing("Happy birthday to me"); age ++; }; this.getAge = function() { return age; } };
好了,以上就是在Javascript中实现的简单的信息隐藏,但是这种封装方式对于继承机制来说并不友好,所以一般只用在不再继承体系中的一个独立的类中。如果实现一个完整的继承体系,我比较倾向于使用约定的编码规则来声明private,比如所有私有方法与属性前加下划线。
var Lily = function() { this._age = 14; this.name = "lily"; this.speak = function(something) { alert("lily:" + something); }; this.ageUp = function() { this._age ++; }; this.getAge = function() { return this._age; } };
这样虽然大家都可以查到Lily同学的年龄,但是如果谁真的去查了,
var lily = new Lily();alert("哈哈,lily的年龄是:" + lily._age);
就会受到大家的指责:“Hi,那是这位女士的隐私,你这样做是不道德的”。
- 面向对象的Javascript:封装
- javascript 面向对象 封装
- javascript面向对象与封装
- javascript面向对象编程封装
- Javascript面向对象编程:封装
- Javascript 面向对象编程:封装
- javascript面向对象编程:封装
- JavaScript面向对象编程-封装
- JavaScript面向对象(一):封装
- Javascript 面向对象编程:封装
- JavaScript面向对象之-----封装
- JavaScript面向对象(1)-封装
- Javascript 面向对象之封装
- javaScript面向对象编程-封装
- Javascript 面向对象编程:封装
- Javascript 面向对象编程 封装
- 面向对象的封装
- 面向对象的封装
- 经典收藏 50个jQuery Mobile开发技巧集萃
- C++ 和 C 互相调用
- HTML+CSS
- Servlet操作Cookie说明
- 二叉搜索树
- 面向对象的Javascript:封装
- Oracle常见错误汇总
- 不同操作系统中的行结束符
- Extjs4.0 之Ext.Class 属性详解 (alias/mixins /uses/requires/singleton等属性)
- deploy the war project
- 在外网访问内网电脑远程桌面的几种方式
- Golden Gate入门指导:安装篇
- 黑马程序员-内省、操作JavaBean工具类
- cocos2d-x中两种播放精灵动画的方式