文章目錄
- 佔佔對類的定義:
- 佔佔對結構體的定義:
- 實現結構體的代碼:
- 實現複雜的類的代碼:
- 小知識:JS實作類別的繼承的機制是這樣的:
回到目錄
今天來說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屬性為子類.
感謝您的閱讀!
回到目錄