(一)javascript面向对象:(2)类

    在 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> 有返回值的一定是函数
原文地址:https://www.cnblogs.com/wangwei123/p/1735240.html