Take a look first:
var objJson={
op1: 'objJson option1',
fn1:function(){
alert(this.op1)
}
}
With this form of declaration, you can There is no problem in directly accessing internal properties through objJson.op1 or objJson.fn1(). But if this is the case:
var objFn=function(){
this.op1='objFn.op1';
this.op2=function(){
alert(this.op1)
};
}
Then if you access the internal properties directly with objFn.op1 or objFn.op2(), it won't work, because it is not an object at this time.
So we need to instantiate him
var inst =new objFn();
alert(inst.op1);
inst.op2();
This way you can get the value you want.
If you want to copy an object in JSON form, it is very simple, but there is a problem:
var newone=objJson;
newone.op1='changed';
alert('objJson.op1');
You will find the original The value of op1 in the object has also changed. But if the second method of object declaration is used, the modification is only within the instance and will not affect other instances.
So static objects like JSON are suitable for use when writing some commonly used libraries. They have their own namespace, so no one will interfere with others, and they are easy to use.
The "public" and "private" attributes of the constructor
We will make a modification to the above constructor:
var objFn=function(){
var pri1='private variable';
this.op1='public variable';
this.op2 =function(){
alert(pri1 ',' this.op1);
};
};
var o=new objFn();
alert(typeof o.pri1 ' ,' typeof o.op1);//undefined, string
o.op2();//Private variables, public variables
Private variables are not allowed to be accessed outside the object, all After typeof, it is undefined. Let's take a look at the access to private methods:
var objFn= function(){
var pri1='Private variable';
var pri2=function(){
this.op2();
};
this.op1='Public variable' ;
this.op2=function(){
alert(pri1 ',' this.op1);
};
this.acPri=function(){
pri2.call(this );
};
};
var o=new objFn();
o.acPri();//Private variables, public variables
Note Because of the closure feature of JavaScript, when we call the private method pri2 through the public method acPri(), we need to use call to pass the context of the program in. However, this seems to be too confusing, so we can wrap it up a little:
var objFn=function(){
var my =this;
var pri1='Private variable';
var pri2=function(){
my.op2();
};
this.op1='Public variable';
this.op2=function(){
alert(pri1 ',' this.op1);
};
this.acPri=function(){
pri2.();
};
};
var o=new objFn();
o.acPri();//Private variables, public variables
Of course the final result is still constant.
Please keep the following information when reprinting
Author: Beiyu (tw:@rehawk)