读书人

用闭包技术兑现成员变量私有的javascr

发布时间: 2012-11-25 11:44:31 作者: rapoo

用闭包技术实现成员变量私有的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引擎的优化能力.

读书人网 >JavaScript

热点推荐