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 图片等比例缩放代码
May 13 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
Oct 28 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 Javascript
JavaScript原型继承_动力节点Java学院整理
Jun 30 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
layui操作列按钮个数和文字颜色的判断实例
Sep 11 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
Aug 22 Javascript
浅谈 JavaScript 沙箱Sandbox
Nov 02 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
新老版本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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
PHP中file_get_contents高?用法实例
2014/09/24 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python字符串的修改方法实例
2019/12/19 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
小区门卫管理制度
2014/01/29 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
回复函范文
2015/07/14 职场文书
Django实现翻页的示例代码
2021/05/24 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python