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 相关文章推荐
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
Bootstrap精简教程
Nov 27 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
Sep 28 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
基于vue实现移动端圆形旋钮插件效果
Nov 28 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 Javascript
element-ui 弹窗组件封装的步骤
Jan 22 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实现的下载css文件中的图片的代码
2010/02/08 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
详解Angular5 服务端渲染实战
2018/01/04 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
构建Python包的五个简单准则简介
2015/06/15 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
python梯度下降法的简单示例
2018/08/31 Python
python可视化实现代码
2019/01/15 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Python 爬虫性能相关总结
2020/08/03 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
python爬取抖音视频的实例分析
2021/01/19 Python
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
总务岗位职责
2013/11/19 职场文书
工程移交协议书
2016/03/24 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript
CPU不支持Windows11系统怎么办
2021/11/21 数码科技