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 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
jQuery 第二课 操作包装集元素代码
Mar 14 Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
JS获取当前日期和时间的简单实例
Nov 19 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
简述jQuery Easyui一些用法
Aug 01 jQuery
js实现QQ邮箱邮件拖拽删除功能
Aug 27 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递归删除目录与文件的方法
2015/01/30 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
vue 授权获取微信openId操作
2020/11/13 Javascript
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
十八大报告观后感
2014/01/28 职场文书
劳动之星获奖感言
2014/02/01 职场文书
运动员口号
2014/06/09 职场文书
征兵宣传标语
2014/06/20 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
法定授权委托证明书
2015/06/18 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书