javascript学习(8)——[知识储备]封装
来源:互联网 发布:黑米软件新闻 编辑:程序博客网 时间:2024/05/22 08:13
既然说到javascript的面向对象编程,那么我们也该说一下javascript中封装的实现。
javascript中封装的实现也有以下几种实现方式:
(1)门户大开类型
(2)用命名规范区别私有和共有的方式
(3)闭包
下面,我们就一一展开介绍:
(1)门户大开类型
/** * 信息的隐藏是最终的目的,封装只不过是隐藏的一种方法 */(function() {/** * 1.门户大开类型 2.用命名规范区别私有和共有的方式 3.闭包 */// 门户大开型function Person(age, name) {this.name = name;if (!this.checkAge(age)) {throw new Error("年龄必须在0到150之间");}this.age = age;}// var p = new Person(-10,"JIM");// alert(p.age)// 解决上述问题Person.prototype = {checkAge : function(age) {if (age > 0 && age < 150) {return true;} else {return false;}}}Person.prototype["getName"] = function() {return this.name || "Hello.js";}// var p = new Person(-10,"JIM");var p = new Person(27, "JIM");var p2 = new Person(27);alert(p2.getName());})()
这段代码是我从网上copy的,我个人并不是很觉得这可以作为一种封装的方式,
第一点:我觉得有些拼凑的嫌疑,而且没有什么规范性可言
第二点:不是很常用,大家看看知道就行了,完全没有必要记住
(2)用命名规范来区别私有和共有变量
(function(){//用命名规范来区别私有和共有变量function Person(name,age,email){//定义私有变量this._name;//私有this._age;//私有this.setName(name);this.setAge(age);this.email = email;//共有}Person.prototype = {setName:function(name){this._name = name;},setAge :function(age){if(age>0 && age < 150){this._age = age;}else{throw new Error("年龄必须在0到150之间");}}}var p = new Person("JIM",-1,"JIM@165.COM");})()
这种方法较上一种方法还算是有些规范了,但是依然不是我们常用的
按照我们java中封装的用法,哈哈,说句扯淡的,越是复杂的,才更常用些,当然,这只是句玩笑
(3)闭包实现封装
/** * 闭包实现封装 */(function(){function person(name,age,email,sex){this.email = email;//public 变量//getthis.getName = function(){return this.name;}this.getAge = function(){return this.age;}//setthis.setName = function(name){this.name = name}this.setAge = function(age){if(age>0 && age < 150){this.age = age}else{throw new Error("年龄必须在0到150之间");}}var _sex = "M";//这也是私有变量的编写方式this.getSex = function(){return _sex;}this.setSex = function(){_sex = sex}this.init = function(){this.setName(name);this.setAge(age);}this.init();}//ceshi var p = new person("JIM",-1,"JIM@126.COM")})()
相对来说,第三种方法更加的常见,同时也是规范性最强的一个。
- javascript学习(8)——[知识储备]封装
- javascript学习(7)——[知识储备]接口
- javascript学习(10)——[知识储备]链式调用
- javascript学习(10)——[知识储备]链式调用
- Java知识学习储备
- 深度学习知识储备
- 深度学习知识储备
- 【知识储备】Hibernate学习笔记
- 【知识储备】struts2学习笔记
- 架构师的成长之路——知识储备
- 知识储备
- 知识储备
- 6lowpan入门学习知识储备
- 学习笔记之编程知识储备
- Netty学习前的知识储备
- 关于学习 unity3D 的知识预储备
- HTML5学习笔记1 知识储备
- 学习网页前的网页知识储备
- vector C++ 详细用法
- Object Storage 定义
- 山东理工大学ACM平台题答案 1178C语言实验——数组逆序
- Hadoop 实现WritableComparable的类
- 今天下午杰森来了, ta的出现让我想起了两年前的那些新鲜事... ...
- javascript学习(8)——[知识储备]封装
- struct结构体中定义构造函数和析构函数
- MAC地址与IP地址的区别
- 【黑马程序员】java正则表达式的学习和总结
- 整理生命
- mac下搭建本地svn服务器
- 改写linux窗口程序设计的Qt例子(2)
- 动态创建多维数组——才不简单
- Java日期格式化