作家
登录

javascript 静态对象和构造函数的使用和公私问题

作者: 来源:www.28hudong.com 2013-03-30 01:49:40 阅读 我要评论

先看: 复制代码 代码如下: 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 isPrototypeOf和hasOwnProperty使用区别

1、isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false。 格式如下: object1.isPrototypeOf(object2); object1是一个对象的实例; objec>>>详细阅读


本文标题:javascript 静态对象和构造函数的使用和公私问题

地址:http://www.17bianji.com/kaifa2/JS/26974.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)