在 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> 有傳回值的一定是函數