javascript 静态对象和构造函数的使用和公私问题


Posted in Javascript onMarch 02, 2010

先看:

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 相关文章推荐
js 表格隔行颜色
Dec 02 Javascript
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
js opener的使用详解
Jan 11 Javascript
wap浏览自动跳转到wap页面的js代码
May 17 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
js实现精美的银灰色竖排折叠菜单
May 16 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
validationEngine 表单验证插件使用实例代码
Jun 15 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
解决bootstrap模态框数据缓存的问题方法
Aug 10 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
JS实现小星星特效
Dec 24 Javascript
新老版本juqery获取radio对象的方法
Mar 01 #Javascript
几个比较经典常用的jQuery小技巧
Mar 01 #Javascript
基于JQuery的密码强度验证代码
Mar 01 #Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
Mar 01 #Javascript
基于jquery.Jcrop的头像编辑器
Mar 01 #Javascript
IE event.srcElement和FF event.target 功能比较
Mar 01 #Javascript
Javascript 判断客户端浏览器类型代码
Mar 01 #Javascript
You might like
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP使用函数用法详解
2018/09/30 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
Python记录详细调用堆栈日志的方法
2015/05/05 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
wxpython绘制圆角窗体
2019/11/18 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
python如何查看网页代码
2020/06/07 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
安全横幅标语
2014/06/09 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
文明单位申报材料
2014/12/23 职场文书
煤矿安全保证书
2015/02/27 职场文书
研讨会通知
2015/04/27 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技