本人对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);
- alert("about add(1,1):"+add(1,1));
- }
- }
-
- Hdx.prototype.walk = function(){
-
- this.where = function(){
- alert("Where can we go?");
- go();
- }
- var go = function(){
- alert("go name:"+name);
- alert("go add(1,1):"+add(1,1));
- }
- }
- </script>
<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">
-
- var hdx = new Hdx();
-
- alert("age:"+hdx.age);
-
- var talk = new Hdx.talk();
-
- talk.what();
-
- var walk = new hdx.walk();
-
- walk.where();
- </script>