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 相关文章推荐
javascript 跳转代码集合
Dec 03 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
js实现的Easy Tabs选项卡用法实例
Sep 06 Javascript
基于jquery插件实现拖拽删除图片功能
Aug 27 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
Jul 05 Javascript
AngularJS ng-app 指令实例详解
Jul 30 Javascript
微信小程序 实例应用(记账)详解
Sep 28 Javascript
微信小程序 switch组件详解及简单实例
Jan 10 Javascript
JavaScript定时器制作弹窗小广告
Feb 05 Javascript
javascript标准库(js的标准内置对象)总结
May 26 Javascript
利用JS响应式修改vue实现页面的input值
Sep 02 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获得url参数中具有&的值的方法
2014/03/05 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
通过javascript把图片转化为字符画
2013/10/24 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
pm2 部署 node的三种方法示例
2017/10/20 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
vue登录注册实例详解
2019/09/14 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
Python下的twisted框架入门指引
2015/04/15 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
淘宝好评语大全
2014/05/05 职场文书
矛盾论读书笔记
2015/06/29 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
SQL Server使用导出向导功能
2022/04/08 SQL Server