在 javascript面向对象:(1)类 中我们了解到类的概念是用函数function表示的,
那么到底在什么情况下才是类,什么情况下才是函数呢?下面我们进行更深入的研究:
用示例来证明才是真理:
示例一:
function Student()
{
this.name = "小明";
this.sex = "男";
this.age = 84;
}
var stu = new Student();
alert("姓名:" + stu.name);
alert("性别:" + stu.sex);
alert("年龄:" + stu.age);
示例一明显是类的用法,先创建类的实例对象,然后通过对象来访问类的公有成员变量。
为什么this.name,this.sex,this.age是公有成员呢?
首先我们要理解this的意思,this是指针,指向当前类的对象,所以name属于当前类Student
的成员变量,在javascript中,只要这样申明的成员变量都属于公有的,那什么情况下是私有的?
function Student()
{
var name = "小明";//this.name = "小明";
this.sex = "男";
this.age = 84;
}
上面用 var name = "小明";中的name就是私有的,在外部你是访问不到的。
示例二:
function Student()
{
var name = "小明";
var sex = "男";
var age = 84;
return {name : name, sex : sex, age : age};
}
带返回值的肯定是函数了,调用方法: Student();
示例三:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
return {name : this.name, this.sex : sex, age : age};
}
带返回值的肯定是函数了,不过只在方法内访问不需要this.name这样申明,但无语法错误。
示例四:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
}
既有公有变量,又有私有变量,但如果做函数使用就毫无意义。
函数使用仅仅是给变量赋初始值,但这些变量却没有任何用处,
在函数外部访问不到,在内部没有用处。
作为类使用:
var stu = new Student();
stu.name = "小强";
示例五:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
this.updateName = function(name){
this.name = name;
}
}
这里加上了公有方法:updateName,毫无疑问是当类使用了,
因为这个函数在内部没有被调用,当然是留给类的对象调用了。
示例六:
function Student(name,sex,age)
{
this.name = name;
this.sex = sex;
this.age = age;
}
这种就像java和c#中类的构造函数:
var stu = new Student("小明","男","58");
alert(stu.name);
alert(stu.sex);
alert(stu.age);
然而你当函数使用也无妨,不会有什么错误
调用: Student("小明","男","58");
你改变了函数中的name,sex,age,那你在外部能访问吗?所以无意义。
看了上面的示例发现,类和函数的使用还是没有明显的区别和界限,
完全由你自己来决定如何使用,但是得考虑定义这个类或者函数的意图,
到底是表达类,还是函数?
类:
1> 必须使用new
2> 必须申明公有成员变量或者公有的方法(没有任何公有的就没意义了)
3> 无返回值
函数:
1> 不需要使用new
2> 可以不申明公有成员变量或者公有方法(有的话没有太大意义)
3> 有返回值的一定是函数
那么到底在什么情况下才是类,什么情况下才是函数呢?下面我们进行更深入的研究:
用示例来证明才是真理:
示例一:
function Student()
{
this.name = "小明";
this.sex = "男";
this.age = 84;
}
var stu = new Student();
alert("姓名:" + stu.name);
alert("性别:" + stu.sex);
alert("年龄:" + stu.age);
示例一明显是类的用法,先创建类的实例对象,然后通过对象来访问类的公有成员变量。
为什么this.name,this.sex,this.age是公有成员呢?
首先我们要理解this的意思,this是指针,指向当前类的对象,所以name属于当前类Student
的成员变量,在javascript中,只要这样申明的成员变量都属于公有的,那什么情况下是私有的?
function Student()
{
var name = "小明";//this.name = "小明";
this.sex = "男";
this.age = 84;
}
上面用 var name = "小明";中的name就是私有的,在外部你是访问不到的。
示例二:
function Student()
{
var name = "小明";
var sex = "男";
var age = 84;
return {name : name, sex : sex, age : age};
}
带返回值的肯定是函数了,调用方法: Student();
示例三:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
return {name : this.name, this.sex : sex, age : age};
}
带返回值的肯定是函数了,不过只在方法内访问不需要this.name这样申明,但无语法错误。
示例四:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
}
既有公有变量,又有私有变量,但如果做函数使用就毫无意义。
函数使用仅仅是给变量赋初始值,但这些变量却没有任何用处,
在函数外部访问不到,在内部没有用处。
作为类使用:
var stu = new Student();
stu.name = "小强";
示例五:
function Student()
{
this.name = "小明";
this.sex = "男";
var age = 84;
this.updateName = function(name){
this.name = name;
}
}
这里加上了公有方法:updateName,毫无疑问是当类使用了,
因为这个函数在内部没有被调用,当然是留给类的对象调用了。
示例六:
function Student(name,sex,age)
{
this.name = name;
this.sex = sex;
this.age = age;
}
这种就像java和c#中类的构造函数:
var stu = new Student("小明","男","58");
alert(stu.name);
alert(stu.sex);
alert(stu.age);
然而你当函数使用也无妨,不会有什么错误
调用: Student("小明","男","58");
你改变了函数中的name,sex,age,那你在外部能访问吗?所以无意义。
看了上面的示例发现,类和函数的使用还是没有明显的区别和界限,
完全由你自己来决定如何使用,但是得考虑定义这个类或者函数的意图,
到底是表达类,还是函数?
类:
1> 必须使用new
2> 必须申明公有成员变量或者公有的方法(没有任何公有的就没意义了)
3> 无返回值
函数:
1> 不需要使用new
2> 可以不申明公有成员变量或者公有方法(有的话没有太大意义)
3> 有返回值的一定是函数