,一javascript面向对象:

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> 有返回值的一定是函数