日期:2014-05-16  浏览次数:20319 次

用闭包技术实现成员变量私有的javascript bean
标题看着挺高竿儿的,其实没啥  ~
 function jsBean(){
  this.field1 = null;
  var field2 = null;
  this.setField2= function(arg){
   field2 = arg;
  }
  this.getField2 = function(){
   return field2;
  }
 }



测试代码:
var bean = new jsBean();
alert(bean.field1);  //弹出 null
alert(bean.field2);//弹出 undefined
alert(bean.getField2());//弹出 null


在javascript中,function 才是最高级别的对象~

有人说了,闭包干啥,直接都暴露出来不就好了?
有人说了,有这样的东西有什么用?我在javascript里面从来也用不到,它既不能直接放到一个text 文本框里面,也不能传给ajax后台....
答案很简单,这样写更面向对象,你的代码更易读易维护....,想象一下你的java code为什么不用String 和 int double 这些类型到处用,而是在需要的时候定义一个VO?
1 楼 wilsonxu 2008-11-19  
1.每次new jsBean()时,都会创建新的函数对象,造成重复建设.事实上,函数是可以通过propotype共享的.

function jsBean(){ 
  this.field1 = null; 
  var field2 = null; 
}

jsBean.propotype.setField2= function(arg){ 
  field2 = arg; 

jsBean.propotype.getField2 = function(){ 
  return field2; 


2. 闭包最大的作用:把数据(外部函数的参数或局部变量)和其操作(内部函数)优雅地打包,生成一个移植性高的代码单元.
2 楼 fins 2008-11-20  
wilsonxu 写道
1.每次new jsBean()时,都会创建新的函数对象,造成重复建设.事实上,函数是可以通过propotype共享的.

function jsBean(){ 
  this.field1 = null; 
  var field2 = null; 
}

jsBean.propotype.setField2= function(arg){ 
  field2 = arg; 

jsBean.propotype.getField2 = function(){ 
  return field2; 


2. 闭包最大的作用:把数据(外部函数的参数或局部变量)和其操作(内部函数)优雅地打包,生成一个移植性高的代码单元.


你在1 中的示例 根本就不对哦

get set方法中 操作的 field2  是全局的
不是 jsBean函数内部定义的那个.

不信你可以试一试  让jsBean函数内部的 field2 =123
然后 你调用 get方法试一试 看一看是什么现象.


而你在 2 中所描述的那个闭包的作用我也不是很认同
当然 这个是仁者见仁的东西 没必要讨论个对错 但是1 中的代码确实错误了

另外 1中最开始的那句话 说的也不完全正确
你要相信js引擎的优化能力.