(一)javascript物件導向:(2)類

來源:互聯網
上載者:User
    在 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> 有傳回值的一定是函數

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.