在面向對象程式設計中,類是對象的模闆,定義了同一組對象(另一說法,又稱“執行個體”)共有的屬性和方法。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對象上面,都是私有的。
大家看了這個是不是了解了呢。