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 相关文章推荐
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
javascript模拟select,jselect的方法实现
Nov 08 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
Aug 23 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
vant 自定义 van-dropdown-item的用法
Aug 05 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 Javascript
详解Vue的mixin策略
Nov 19 Vue.js
微信小程序实现首页弹出广告
Dec 03 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP asXML()函数讲解
2019/02/03 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
js 通用订单代码
2013/12/23 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
python安装教程
2018/02/28 Python
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
小学作文之描写天气
2019/08/15 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
python编程项目中线上问题排查与解决
2021/11/01 Python