1.一般函数
还在coding c#的时候,用JS页面层做输入校正,第一次接触 function 这个东西,
function chkName(name){ //验证代码 } function chkEmail(email){ //验证代码 }
2. 函数有另一种写法 --- 匿名函数 or 函数变量化
1 var chkName = function(name){ 2 //验证代码 3 } 4 var chkEmail = function(email){ 5 //验证代码 6 }
来了一点新鲜和好奇,随即学习了下why?因为js预解析时候对变量和函数采取的策略是不同的,所以这2种写法效果还是有点同的具体在上一篇有简单说明
但是这2种方法在团队开发会遇到一个很大的问题,方法被覆盖而不容易察觉到。
那么久引用一个简单直观的方法 --- 3.对象收编变量
1 var ckh = { 2 chkName: function(name) { 3 //验证代码 4 }, 5 chkEmail: function(email) { 6 //验证代码 7 } 8 }
先不说这样写的好处,以为还有一种
4.对象的另一种形式
1 var ckh = {} 2 ckh.chkName= function(name) { 3 //验证代码 4 } 5 6 ckh.chkEmail= function(email) { 7 //验证代码 8 }
这2种写法结果是一样的,区别是前一种写法方法更集中,更直观,方便查阅,后一种方便拓展,在实际开发中可以结合起来使用。
除了刚那区别大概都是相同的了,相同的调用方法:chk.chkName(name) , 具体方法可以拓展,也可以被覆盖。
优点 :一定数量上减少了变量,降低了被覆盖的概率,只是降低而已。有了面向对象的影子。
缺点:新创建的对象不能被继承;方法还是会被覆盖,方法只是集中了并没有封装
进一步封装 --- 5.对象的初步类化
1 var ckh =function() { 2 return { 3 chkName:function(name) { 4 //验证代码 5 }, 6 chkEmail:function(email) { 7 //验证代码 8 } 9 } 10 }
这样写可以对上面2中写法加以封装,使得chk对象只能在 retrun 代码块拓展公共方法。使得自己的方法更好共同管理。
每次调用的时候,其实都是使用一个ruturn 新对象体,
最后的封装 -- 类
1 var ckh = function() { 2 this.chkName = function(name) { 3 console.log("chkName") //验证代码 4 }; 5 this.chkEmail = function(email) { 6 console.log("chkEmail") //验证代码 7 } 8 }
在原型链上扩展方法能直接别继承