javascript 静态对象和构造函数的使用和公私问题
javascript 静态对象和构造函数的使用和公私问题
发布时间:2016-12-30 来源:查字典编辑
摘要:先看:复制代码代码如下:varobjJson={op1:'objJsonoption1',fn1:function(){alert(this...

先看:

复制代码 代码如下:

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教程学习
编程开发子分类