Javascript基礎與面(mian)向(xiang)對(dui)象基礎~第四講 Javascript中的類(lei)對(dui)象
今天來說JS中如何(he)實現類(class),事實上本應該昨天晚上寫的(de),可我失言(yan)了,在些說一聲(sheng)“抱歉”!JS中的(de)類是JS面(mian)向對象的(de)基(ji)礎,也是我最拿手(shou)的(de)東西,你寫的(de)代(dai)碼(ma)能否提高一個層次,一般是從這點上看出來的(de)。
占占對類的定義:
類是對(dui)現(xian)(xian)實(shi)中(zhong)的(de)事物的(de)抽(chou)象(xiang)(xiang),一(yi)個類一(yi)般(ban)由屬(shu)(shu)性(xing)和方法構成,屬(shu)(shu)性(xing)是一(yi)些固定(ding)的(de)信息,而方法是類的(de)某種(zhong)行(xing)為,類往(wang)往(wang)用(yong)來抽(chou)象(xiang)(xiang)一(yi)些復(fu)雜的(de)對(dui)象(xiang)(xiang),類與類這間可以(yi)進行(xing)繼(ji)承,一(yi)般(ban)通過JS的(de)function實(shi)現(xian)(xian),JS中(zhong)的(de)類對(dui)象(xiang)(xiang)是實(shi)現(xian)(xian)JS面向對(dui)象(xiang)(xiang)的(de)基(ji)礎(chu)。
占占對結構體的定義:
一(yi)(yi)個(ge)結構(gou)體(ti)也是對(dui)現(xian)實事(shi)物的一(yi)(yi)種抽象(xiang),它用來表示(shi)邏輯簡單的對(dui)象(xiang),一(yi)(yi)般通(tong)過JS的object對(dui)象(xiang)實現(xian)
實現結構體的代碼:
//簡單結(jie)構體對象 var Animal = { Name: "動物", Type: "", Food: ["草", "肉"], Print: function () { console.log("名稱:" + this.Name + ",類型:" + this.Type + ",食物:" + this.Food); } }; Animal.Print();//調用
實現復雜的類的代碼:
//復雜(za)的類型對象(xiang) 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();
子類(lei)去(qu)繼承父類(lei),但復寫父類(lei)的(de)屬(shu)性,調用父類(lei)的(de)方法,代碼如下:
//子類(lei)可(ke)以(yi)繼承父(fu)類(lei),并可(ke)以(yi)復寫它的屬性 var Dog = function (name, type, food) { //調用父(fu)類(lei)構(gou)造方法,并傳(chuan)遞name參數 AnimalFun.call(this, name, type); //復(fu)寫屬性 this.Food = food; } //將Dog的原型鏈指向AnimalFun對象 Dog.prototype = new AnimalFun(); //重(zhong)置constructor屬性為(wei)Student類,由于(yu)設置了Student類的prototype為(wei)Person時 //擦除了(le)constructor屬性 Dog.prototype.constructor = Dog; //實例化Dog類(lei) var s = new Dog('狗', '低級動物', '肉'); //調(diao)用父類(lei)的方法 s.Print(); //結果:名稱:狗,類(lei)型:低級動物,食物:肉
小知識:JS實現類的繼承的機制是這樣的:
在子類(lei)(lei)構造(zao)函(han)數(constructor)中調用(yong)父(fu)類(lei)(lei)構造(zao)函(han)數(父(fu)類(lei)(lei).call()).
修改子類prototype(原型鏈)屬性為父類的實例.(prototype一般用來實現對函數的擴展,Dog.prototype = new AnimalFun();表示對父類AnimalFun進行擴展)
重置(zhi)子類的(de)prototype的(de)constructor屬性(xing)為子類.
感謝您的閱讀!