|
js变量作用域及可访问性的探讨(2) 私有变量,值得是某个类自己内部是用的一个属性,外部无法调用,其定义是用 var 来声明的。注意如果不用var 来声明,该变量将是全局变量(我们下面将会讨论),如:
1function Student(name,age,from) 2{ 3 4 this.name = FormatIt(name); 5 this.age = age; 6 this.from = from; 7 var origName = name; 8 var FormatIt = function(name) 9 { 10 return name.substr(0,5); 11 } 12 this.ToString = function() 13 { 14 return "my information is name: "+origName+",age : "+this.age+", from :" +this.from; 15 } 16} 17 18 这里,我们分别定义了一个origName和FormatIt()两个私有变量(按面向对象的解释,应该用类的属性来称呼)。 我们把这种情况下的方法也成为变量,因为该情况下的变量是个function类型的变量,而function也属于Object类的继承类。在这种情形下,如果我们定义了 var zfp = new Student("3zfp",100,"ShenZhen")。但无法通过zfp.origName和zfp.FormatIt()方式来访问这两个变量的。
注意以下几点:
1、私有变量是不能用this来指示的。 2、私有方法类型的变量的调用必须是在该方法声明后。如我们将Student类改造如下:
1function Student(name,age,from) 2{ 3 var origName = name; 4 this.name = FormatName(name); 5 this.age = age; 6 this.from = from; 7 var FormatName = function(name) 8 { 9 return name+".china"; 10 } 11 this.ToString = function() 12 { 13 return "my information is name: "+origName+",age : "+this.age+", from :" +this.from; 14 } 15} 16var zfp = new Student("3zfp",100,"ShenZhen"); 代码执行后,将会报"找不到对象"的错误.意思是FormatName()未定义。
3、私有方法无法访问this指示的变量(公开变量),如下:
1 2function Student(basicinfo) 3{ 4 this.basicInfo = basicinfo; 5 6 var FormatInfo = function() 7 { 8 this.basicInfo.name = this.basicInfo.name+".china"; 9 } 10 FormatInfo(); 11 12} 13function BasicInfo(name,age,from) 14{ 15 this.name = name; 16 this.age = age; 17 this.from = from; 18} 19var zfp = new Student(new BasicInfo("3zfp",100,"ShenZhen")); 20 21 执行代码后,系统将会提示 “this.basicInfo为空或不是对象”的错误。
|