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")})()

相对来说,第三种方法更加的常见,同时也是规范性最强的一个。