今天來說JS中如何實現類(class),事實上本應該昨天晚上寫的,可我失言了,在些說一聲“抱歉”!JS中的類是JS面向對象的基礎,也是我最拿手的東西,你寫的代碼能否提高一個層次,一般是從這點上看出來的。
占占對類的定義:
類是對現實中的事物的抽象,一個類一般由屬性和方法構成,屬性是一些固定的信息,而方法是類的某種行為,類往往用來抽象一些復雜的對象,類與類這間可以進行繼承,一般通過JS的function實現,JS中的類對象是實現JS面向對象的基礎。
占占對結構體的定義:
一個結構體也是對現實事物的一種抽象,它用來表示邏輯簡單的對象,一般通過JS的object對象實現
實現結構體的代碼:
//簡單結構體對象 var Animal = { Name: "動物", Type: "", Food: ["草", "肉"], Print: function () { console.log("名稱:" + this.Name + ",類型:" + this.Type + ",食物:" + this.Food); } }; Animal.Print();//調用
實現復雜的類的代碼:
//復雜的類型對象 var AnimalFun = function (name, type) { this.Name = name; this.Type = type; this.Food = ["草", "肉"]; this.Print = function () { console.log("名稱:" + this.Name + ",類型:" + this.Type + ",食物:" + this.Food); } }; var animalFun = new AnimalFun(); animalFun.Print();
子類去繼承父類,但復寫父類的屬性,調用父類的方法,代碼如下:
//子類可以繼承父類,並可以復寫它的屬性 var Dog = function (name, type, food) { //調用父類構造方法,並傳遞name參數 AnimalFun.call(this, name, type); //復寫屬性 this.Food = food; } //將Dog的原型鏈指向AnimalFun對象 Dog.prototype = new AnimalFun(); //重置constructor屬性為Student類,由於設置了Student類的prototype為Person時 //擦除了constructor屬性 Dog.prototype.constructor = Dog; //實例化Dog類 var s = new Dog('狗', '低級動物', '肉'); //調用父類的方法 s.Print(); //結果:名稱:狗,類型:低級動物,食物:肉
小知識:JS實現類的繼承的機制是這樣的:
在子類構造函數(constructor)中調用父類構造函數(父類.call()).
修改子類prototype(原型鏈)屬性為父類的實例.(prototype一般用來實現對函數的擴展,Dog.prototype = new AnimalFun();表示對父類AnimalFun進行擴展)
重置子類的prototype的constructor屬性為子類.
感謝您的閱讀!