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 相关文章推荐
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
JQuery Tab选项卡效果代码改进版
Apr 01 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
Dec 11 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 Javascript
jquery实现右键菜单插件
Mar 29 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 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实现的Timer页面运行时间监测类
2014/09/24 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js 函数调用模式小结
2011/12/26 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
ant design实现圈选功能
2019/12/17 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
[原创]pip和pygal的安装实例教程
2017/12/07 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
群众路线四风自我剖析材料
2014/10/08 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
2014年公司工作总结
2014/11/22 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
华清池导游词
2015/02/02 职场文书
学生个人总结范文
2015/02/15 职场文书
先进个人总结范文
2015/02/15 职场文书
工作自我评价范文
2015/03/05 职场文书
大学运动会通讯稿
2015/07/18 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
小学思品教学反思
2016/02/20 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL