javascript 静态对象和构造函数的使用和公私问题
2010-03-02 00:00
567 查看
先看:
在这种形式的声明下,你可以通过objJson.op1或者objJson.fn1()来直接访问内部的属性,这没有问题。但是如果是这样:
那么如果你直接objFn.op1或者objFn.op2()来访问内部的属性的话,就不行了,因为这个时候他还不是个对象。
所以我们需要将他实例化
这样就可以得到你想要的值了。
如果你想复制JSON形式的对象,很简单,但是有一个问题:
你会发现原来的对象中的op1的值也发生了改变。但是如果使用的第二种的对象声明的办法,那么修改只是在实例的内部,不会影响其他的实例。
所以像JSON这样的静态对象适合在写一些常用的库的时候使用,有他自己的命名空间,谁也不会干扰到谁,而且方便使用。
构造函数的"公有""私有"属性
我们将上面的构造函数做一个修改:
私有变量在对象外是不允许访问的,所有typeof以后是undefined。下面我们看看私有方法的访问:
注意到这里因为JavaScript的闭包特性,我们通过公有方法acPri()调用私有方法pri2的时候需要使用call将程序的上下文传递进去,不过就是这个看起来绕来绕去的太晕,可以稍稍的包装一下:
当然最后的结果还是不变。
转载请保留以下信息
作者:北玉(tw:@rehawk)
var objJson={ op1:'objJson option1', fn1:function(){ alert(this.op1) } }
在这种形式的声明下,你可以通过objJson.op1或者objJson.fn1()来直接访问内部的属性,这没有问题。但是如果是这样:
var objFn=function(){ this.op1='objFn.op1'; this.op2=function(){ alert(this.op1) }; }
那么如果你直接objFn.op1或者objFn.op2()来访问内部的属性的话,就不行了,因为这个时候他还不是个对象。
所以我们需要将他实例化
var inst=new objFn(); alert(inst.op1); inst.op2();
这样就可以得到你想要的值了。
如果你想复制JSON形式的对象,很简单,但是有一个问题:
var newone=objJson; newone.op1='changed'; alert('objJson.op1');
你会发现原来的对象中的op1的值也发生了改变。但是如果使用的第二种的对象声明的办法,那么修改只是在实例的内部,不会影响其他的实例。
所以像JSON这样的静态对象适合在写一些常用的库的时候使用,有他自己的命名空间,谁也不会干扰到谁,而且方便使用。
构造函数的"公有""私有"属性
我们将上面的构造函数做一个修改:
var objFn=function(){ var pri1='私有变量'; this.op1='公共变量'; this.op2=function(){ alert(pri1+','+this.op1); }; }; var o=new objFn(); alert(typeof o.pri1+','+typeof o.op1);//undefined,string o.op2();//私有变量,公共变量
私有变量在对象外是不允许访问的,所有typeof以后是undefined。下面我们看看私有方法的访问:
var objFn=function(){ var pri1='私有变量'; var pri2=function(){ this.op2(); }; this.op1='公共变量'; this.op2=function(){ alert(pri1+','+this.op1); }; this.acPri=function(){ pri2.call(this); }; }; var o=new objFn(); o.acPri();//私有变量,公共变量
注意到这里因为JavaScript的闭包特性,我们通过公有方法acPri()调用私有方法pri2的时候需要使用call将程序的上下文传递进去,不过就是这个看起来绕来绕去的太晕,可以稍稍的包装一下:
var objFn=function(){ var my=this; var pri1='私有变量'; var pri2=function(){ my.op2(); }; this.op1='公共变量'; this.op2=function(){ alert(pri1+','+this.op1); }; this.acPri=function(){ pri2.(); }; }; var o=new objFn(); o.acPri();//私有变量,公共变量
当然最后的结果还是不变。
转载请保留以下信息
作者:北玉(tw:@rehawk)
相关文章推荐
- javascript 静态对象和构造函数的使用和公私问题
- javascript 静态对象和构造函数的使用和公私问题
- JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
- javascript--面向对象(三)原型对象存在的问题及组合组合使用原型和构造函数
- 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
- 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
- JavaScript 创建对象--组合使用构造函数模式和原型模式
- JavaScript-RegExp对象只能使用一次问题解决方法
- javascript中构造函数的返回值问题和new对象的过程
- javascript中值传递,地址传递,引用传递的问题(使用js创建list对象时会用到)
- JavaScript-RegExp对象只能使用一次问题解决方法
- 解决使用JavaScriptConvert转换对象为Json时,中文和&符号被转码的问题
- Java使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数
- javascript中构造函数的返回值问题和new对象的过程
- 【坑】javascript中使用window对象中的moveBy无效的问题
- JavaScript call apply使用——JavaScript对象的方法绑定到DOM事件后this指向问题
- 基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
- JavaScript-RegExp对象只能使用一次问题解决方法
- 关于解决JavaScript中使用require引用外部js时出现的某个对象 not defined 时现时消失 问题