1、js的封装
门户大开型
(function() { // 门户大开型 为门户打开性添加验证的逻辑实现 function Person(age,name) { this.name = name if(!this.checkAge(age)) { throw new Error('年龄必须在0到150之间') } this.age = age } Person.prototype = { checkAge: function(age) { if(age>0&&age<150) { return true }else { return false } } } Person.prototype['getName'] = function(){ return this.name || 'ji' } // var p = new Person(-10,'jim') var p = new Person(27,'jim') var p2 = new Person(27) alert(p2.getName()) })()
用命名规范来区别私有和公有变量
(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.com') })()
闭包
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 _set = "M" // this.getSex = function() { // return _set // } // this.setSex = function() { // _sex = sex // } //保证程序 先执行set 在执行 get this.init = function(){ // var name = // var age = this.setName(name) this.setAge(age) } this.init() } var p = new Person('jim',-1,'jim.com')
静态化
(function() { function Person(name,age) { this.name = name this.age = age this.showName = function() { alert(this.name) } } Person.add = function(x,y) { return x+y } alert(Person.add(10,20)) //静态函数 //用类中类的方式完成 var cat = (function() { var AGE = 1; function add(x,y) { return x+y; } return function() { this.AGE = AGE this.add = function(x,y) { return add(x,y) } } })() alert(new cat().add(1,2)) alert(new cat().AGE) })()