js面向对象--理解闭包
由于js语言自身语法的灵活性,使得在js程序中出现了各种各样的代码风格,但也正因为如此,导致了代码的可读性和可维护性大大降低,特别随着项目的不断更新,js代码的不断增多,到后期维护时甚至连自己写的代码都不知所以然了,因此确定一种好的代码风格是很有必要的。
近两年随着ajax的兴起,js变得越来越受“重用”,js开始在web开发中中充当着非常重要的角色,因此也开始遇到了各种各样的问题。于是很多牛人们就提出了js的面向对象编程方法。
使用面向对象的编程思想实现js代码其实也并不难,实现方法也又多种,比如prototype原型,new object()等方法。前面的每个方法都有其自己的优缺点,但都存在一个问题,那就是对于js变量作用域的控制。如果不能很好控制js变量作用域,就可能导致对象内部变量被外部肆意修改,从而导致程序被破坏,不便于程序的维护,对象的封装特性和程序健壮性都大打折扣。被由于js本身没有很好的对变量范围的定义(public/private等限定符),因此在js的面向对象编程中也就遇到了变量的控制问题,特别是对于对象内部的公有变量在prototype原型方法中都很难实现。
如下面一段程序:
var testCls=function(arg1){ //对象内部公有变量,不允许外部访问 var a=arg1; var b=10; var alertB=function(){ alert(b); } //外部可访问区域 return { c:5, setA:function(v){ a=v; }, alertA:function(){ alert(a); }, alertB:function(){ alertB(); } }};var test=new testCls(4);test.setA(6);test.alertA();test.alertB();