JS高级编程——属性/变量 访问权限

        本人对JS的高级编程也只是略知一二,近段时间老实遇到JS问题,索性做一个探索性的研究,现在把探索的结果记录下来:一来可以自己以后看看;二来供初学者学习。欢迎JS高手给予指点,发现问题请留言。
         研究发现:我们可以将属性(变量)分为三类(对象属性,全局变量和局部变量),下面我来对三类属性(变量)的声明方法和访问权限做一下探究。

对象属性:声明时以“this.”开头,只能被“类的实例”即类的对象所调用,不能被“类内部”调用。
全局变量:声明时直接以变量名开头,可以被“类函数”、“原型函数”和“类内部”所调用。
局部变量:只能被“类内部”调用。


注:JS函数的声明与访问同理。

<script type="text/javascript">
//类
var Hdx = function(){
  //对象属性(只能被“类的实例”和“实例函数”调用)
  this.age ="25";
  //全局变量(只能被“类函数”、“原型函数”和“类内部”调用)
  name="jack";
  //局部变量(只能被“类内部”调用)
  var address = "beijing";
  
  //全局函数(内部/全局直接调用)
  add = function(a,b){
 	//只能访问:全局变量和局部变量
 	multiply(a,b);
  	return a+b;
  }
  //实例函数(由类的对象调用)
  this.minus = function(a,b){
    //可以访问:对象属性、全局变量和局部变量
  	return a-b;
  }
  //局部函数(内部直接调用)
  var multiply = function(a,b){
    //只能访问:全局变量和局部变量
  	return a*b;
  }
}


//类函数(由类名直接调用)
Hdx.talk= function(){
  //只能访问:全局变量和全局函数
  this.what = function(){
  	alert("What can we talk about?");
  	about();
  }
  
  var about = function(){
  	alert("about name:"+name);//jack
  	alert("about add(1,1):"+add(1,1));//2
  }
}


//原型函数(由类的对象调用)
Hdx.prototype.walk = function(){
  //只能访问:全局变量和全局函数
  this.where = function(){
  	alert("Where can we go?");
  	go();
  }
  
  var go = function(){
    alert("go name:"+name);//jack
    alert("go add(1,1):"+add(1,1));//2
  }
}
</script>


下面看看如何调用:
<script type="text/javascript">
//获取一个Hdx类的实例
var hdx = new Hdx();
//调用类的对象属性age
alert("age:"+hdx.age);

//获取类函数talk的实例
var talk = new Hdx.talk();
//调用类函数的实例函数
talk.what();

//获取原型函数walk的实例
var walk = new hdx.walk();
//调用原型函数的实例函数
walk.where();
</script>

你可能感兴趣的:(编程,prototype,Go)