單身狗和動物的故事 Javascript繼承

2021-08-01 06:18:19 字數 2626 閱讀 7372

閒話少敘,繼續講單身狗的故事。

function

animal

()function

dog(name)

我們知道,單身狗是一種動物,那麼工廠怎麼來表示這種繼承關係呢?

function

animal

()function

dog(name)

var dog = new dog('單身狗');

console.log(dog.name, dog.type); // 單身狗 動物

前提知識:

原型鏈繼承方式最終表達為:

var dog = new dog();

// 獲得父類和爺爺類方法如下

dog.__proto__.__proto__.__proto__;

2.1 那麼__proto__這個是怎麼來的呢?
// 例項的__proto__是引用建構函式的prototype

dog.__proto__ === dog.prototype; // true

按照上面**的邏輯父類應該怎麼繼承就變成了這樣:

dog.prototype.__proto__ === animal.prototype; // true
那麼怎樣達到上面**的效果呢?

dog.prototype = new animal();
這種方式有什麼問題?

每個prototype都有乙個constructor,指向構造方法本身:

dog.prototype.constructor === dog; //

true

執行以上**後就變成了:

dog.prototype.constructor === animal; //

true

這樣就破壞了構造方法的基本結構。

為什麼會變成這樣?

實際上呼叫方法內****執行的:

1.先在dog.prototype上查詢constructor屬性,實際上沒找到;

2.再在dog.prototype的原型鏈查詢上一級原型是否含有這個屬性dog.prototype.__proto__.constructor

3.發現有乙個叫做constructor的屬性,然後返回這個屬性。

怎麼解決?

// 加一句

dog.prototype.constructor = dog;

完整版:

dog.prototype = new animal();

dog.prototype.constructor = dog;

var dog = new dog();

完美!

2.2 思考另外一種方法

// 是否可以這樣實現子類繼承父類?

dog.prototype = animal.prototype;

dog.prototype.constructor = dog;

var dog = new dog();

測試:

animal.prototype.constructor === dog; // true
問題:

改掉了父類的構造方法。

2.3 終極繼承**!

var f = function

(){};

f.prototype = animal.prototype;

dog.prototype = new f();

dog.prototype.constructor = dog;

優點:

節能環保

new dog()被執行時乾的活:

1.dog方法內建立乙個物件,this指向這個物件;

2.this.__proto__ = dog.prototype

3. 執行dog方法內的邏輯;

4. 方法最後一定返回乙個物件。分以下幾種情況

如果沒有return,則返回this

如果有return,且return返回的是乙個js的原始資料,方法返回this。反之,方法返回return關鍵字後面的物件。

var self;

function

foo()

foo.prototype.getname = function

() var f = new foo();

console.log(f === self);

單身狗和共享單車的約會

1個揹包,3只單身狗,7小時騎行,80公里,自己選的路跪著也要走完 前言 與兩個大兄弟的約會 周五下班的路上,騎著摩拜單車飛奔在馬路上。聽到後面的大兄弟說週六週末幹嘛去,於是另外乙個大兄弟說要不騎三環,三環太沒有挑戰了吧,繞著城市騎行有什麼意思,除了跟在小汽車後面吃灰,還累成狗,有什麼意義,於是我大...

單身狗和共享單車的約會

1個揹包,3只單身狗,7小時騎行,80公里,自己選的路跪著也要走完 前言 與兩個大兄弟的約會 周五下班的路上,騎著摩拜單車飛奔在馬路上。聽到後面的大兄弟說週六週末幹嘛去,於是另外乙個大兄弟說要不騎三環,三環太沒有挑戰了吧,繞著城市騎行有什麼意思,除了跟在小汽車後面吃灰,還累成狗,有什麼意義,於是我大...

苦逼的單身狗

題目描述 雙11又到了,小z依然只是乙隻單身狗,對此他是如此的苦惱又無可奈何。為了在這一天脫單小z決定向女神表白,但性格靦腆的小z決定隱晦一點,擷取一段包含 l o v e 的英文。順序不限 小z想起之前小d送給他一本英文書,決定在這裡面擷取一段話,小z發現有好多種方案來擷取這段話。你能知道小z能有...