天天看點

Javascript類(對象)定義問題

       在面向對象程式設計中,類是對象的模闆,定義了同一組對象(另一說法,又稱“執行個體”)共有的屬性和方法。Javascript語言不支援“類”,但是可以使用一些變通的方法來模拟出類。Javascript中定義類有三種方式,下面就簡單說一下。

       方式一: 構造函數法

       這是Java語言學習中,教科書上必教的方法。如下面的一段代碼:

function Student(stuNo, stuName){
      this.stuNo = stuNo;
      this.stuName = stuName;
}
           

生成執行個體的時候,使用new關鍵字,如:var stu = new Student("stu00001", "小柿子"); 另外類的屬性和方法還可以定義在構造函數的prototype對象之上,如下代碼:

Student.prototype.study = function(){
       console.log("I'm studying");
}
           

這種方式用到了this和prototype對象,不易閱讀,編寫也較複雜。

      方式二:Object.create()法

      為了友善生成對象,出現了Object.create()對象法。原理是根據“類”就是一種對象,而不是函數。如下面的一段代碼:

var student = {
     stuNo: 'stu0001',
     stuName: '小柿子',
     study: function(){
            console.log("I'm studying");
     }
};

var stu = Object.create(student);
console.log(stu.stuName);
stu.study();
           

這種方式是不是比較第一種方式,更加靈活了吧,而且閱讀性也不錯吧。這種方法雖然簡單,但是不能實作私有屬性和私有方法,執行個體直接也不能共享資料,對“類”的模拟不夠全面。

      方式三:極簡主義法

     這種方法,不用使用this和prototype對象,也不用使用Object.create()法來生成對象。下面直接看代碼:

var student =  {
    newInstance: function(){
        var stu = {
            stuNo: 'stu0006',
            stuName: 'erbin',
            study: function(){
                 console.log("I'm studying");
            }
             
        };
        return stu;
    }
}
var stu = student.newInstance();
stu.study();
           

使用這種方式, 類的繼承也比較簡單了,如下:

var address = {
   newInstance: function(){
       var addr = {
          getAddr: function(){console.log("山東省菏澤市")}
       };
       return addr;
   };
};

var student =  {
    newInstance: function(){
        // 繼承
        var stu = address.newInstance();
        stu.stuName = 'erbin';
        stu.study = function(){
            console.log("I'm studying");
        };
        return stu;
    }
}
var stu = student.newInstance();
stu.getAddr(); //擷取學生erbin的位址
           

對于私有屬性和方法,隻用你不把屬性和方法定義在stu對象上面,都是私有的。

    大家看了這個是不是了解了呢。

繼續閱讀