javascript学习(8)——[知识储备]封装
2013-11-17 20:30 低调de草原狼 阅读(149) 评论(0) 编辑 收藏 举报既然说到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 变量 //get this.getName = function(){ return this.name; } this.getAge = function(){ return this.age; } //set this.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") })()
相对来说,第三种方法更加的常见,同时也是规范性最强的一个。