1、灵活的语言----javascript
当我们接到新的需求时,感觉一切都很简单,不就是几个函数的事吗?可能会像下面这样,其实不然。
1 function checkAddress(){ 2 //检测地址 3 } 4 5 function checkPhone(){ 6 //检测手机号码 7 } 8 9 function checkPassword(){ 10 //检测密码 11 }
这样写,相当创建了很多个全局变量,你很惊讶的问,我就写几个函数怎么会是变量哪?别急你在往下看
函数的另一种形式
1 var checkAddress = function(){ 2 //检测地址 3 } 4 5 var checkPhone = function(){ 6 //检测手机号码 7 } 8 9 var checkPassword = function(){ 10 //检测密码 11 }
一样的,只不过。。。。。
对,只不过在用的时候提前声明,但你会看到你创建的三个函数保存在变量里来实现你的功能,其实也是创建了全局的变量,加入一个团队要根据团的规范来写。
这个写法会有弊端的存在,同样的方法别人也定义了,就会出现覆盖原有的功能,这并不是我们期望的结果,该如何解决哪:
用对象存储变量
1 var checkInfo = { 2 checkAddress : function(){ 3 //code 4 }, 5 checkPhone : function(){ 6 //code 7 }, 8 checkPassword : function(){ 9 //code 10 } 11 }
这样我们把所有函数作为checkInfo对象方法,这样我们就有一个对象,使用也很简单:
checkInfo.checkAddress();
对象的另一种形式
首先,要声明一个对象,然后给它添加方法,当然javascript中的函数也是对象,so......
1 var checkInfo = function(){}; 2 checkInfo.checkPassword = function(){}; 3 checkInfo.checkPhone = function(){}; 4 checkInfo.checkAddress = function(){};
使用方法跟前边的一样,checkInfo.checkPhone();
当别人想用你写的对象方法就有些麻烦了,因为这个对象不能复制一份或者说这个对象类在用new关键字创建新的对象时,新创建的对象是不能继承这些方法的
真假对象
如果你是简单的复制一下,可以将这些方法放在一个函数对象中。
1 var checkInfo = function(){ 2 return { 3 checkAddress : function(){}, 4 checkPhone : function(){}, 5 checkPassword : function(){} 6 } 7 }
这样每次调用都会返回一个新的对象,对于其他人的使用互补影响。
调用:var test = checkInfo();
test.checkAddress();
类也可以
通过创建新的对象完成了新的需求,但它不是真正意义上的类,并且创建的对象a 和对象checkInfo没有任何关系,so...
1 var checkInfo = function(){ 2 this.checkAddress = function(){}; 3 this.checkPassword = function(){}; 4 this.checkPhone = function(){}; 5 }
这样的对象我们可以看成是类了,既然是类,那就用关键字new 来创建
var tt = new checkInof();
tt.checkAdress();
值得注意的,通过this定义的,所以没一次通过new 关键字创建新对象的时候,新创建的对象都会有类的this上的属性进行复制,新创建的对象都有自己的一套方法,
这样造成消耗时奢侈的,so...
1 var checkInfo = function(){ 2 checkInfo.prototyp.checkAddress = function(){}; 3 checkInfo.prototyp.checkPhone = function(){}; 4 checkInfo.prototyp.checkPassword = function(){}; 5 6 }
这样创建对象实例的时候,创建出来的对象所拥有的方法都时一个,因为他们都是依赖prototype原型依次寻找,而找到的方法都是同一个,
这种方式我们要将prototype写很多遍,所以我们可以这样处理:
1 var checkInfo = function(){}; 2 checkInfo.prototyp = { 3 checkPassword : function(){}; 4 checkPhone : function(){}; 5 checkAddress : function(){}; 6 }
有一点这两种方式不能混着用,那么将会覆盖掉之前对prototype对象赋值的方法。
方法还可以这样用
1 var checkInfo = { 2 checkAddress : function(){ 3 //code 4 return this; 5 }, 6 checkPhone : function(){ 7 //code 8 return this; 9 }, 10 checkPassword : function(){ 11 //code 12 return this; 13 } 14 }
checkInfo.checkAddress().checkPhone();
同样方式也可以放到原型中。。。。
1 var checkInfo = function(){}; 2 checkInfo.prototyp = { 3 checkPassword : function(){ 4 return this; 5 }; 6 checkPhone : function(){ 7 return this; 8 }; 9 checkAddress : function(){ 10 return this; 11 }; 12 }
使用的时候要创建一下
var a = new checkInfo();
a.checkPassword().checkAddress();
函数的祖先
如果你看过prototy.js代码,你就会想到下边的写法
1 Function.prototyp.checkAddress = function(){ 2 //code 3 }
这样你在使用这个方法就会比较方便
var f = function(){};
f.checkPassword();
这样会污染了原生的Function,统一抽出一个公共的方法
1 Function.prototyp.addMendthod = function(name,fn){ 2 //code 3 this[name] = fn; 4 } 5 6 var methods = new Function(); 7 8 or 9 10 var methods = new Function(); 11 methods.addMendthod('checkAddress',function(){ 12 //CODE 13 }) 14 15 16 methods.checkAddress();
先到这吧,已深夜窗外的野狗又在叫了。。。。。夜难眠。
浙公网安备 33010602011771号