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