我下面就JS繼承的視頻教程,我被困在最後2行的代碼如下:JavaScript繼承。從另一個類繼承的對象和方法
上述假設有一個Animal
類,我們希望使用屬性和方法。
我似乎獲得倒數第二:Cat.prototype = new Animal()
。它是否認爲給貓的原型分配一個新的動物物體?但我無法理解最後一行代碼。
我下面就JS繼承的視頻教程,我被困在最後2行的代碼如下:JavaScript繼承。從另一個類繼承的對象和方法
上述假設有一個Animal
類,我們希望使用屬性和方法。
我似乎獲得倒數第二:Cat.prototype = new Animal()
。它是否認爲給貓的原型分配一個新的動物物體?但我無法理解最後一行代碼。
我會推薦閱讀這篇文章
的prototype
屬性提供的方法和屬性會從您通過Cat
構造函數創建一個對象被繼承的對象。而constructor
不過是一個常規屬性,通常用於標識用於創建對象的構造函數。
Cat.prototype = new Animal()
指Cat
類繼承該方法和Animal
類,最可能的性能,因爲Cat
是Animal
,和再利用從Animal
類Cat
類浪費時間的方法。
Cat.prototype.constructor = Cat
只是使Cat
類的構造函數成爲上面爲所有Cat
對象所做的構造函數。
首先,JavaScript不是基於類的語言。它不知道類的概念,但它知道對象和這兩個組件,我們可以模擬類的行爲並實現繼承。
但是,由於這一切都是一種解決方法,我們有時必須付出額外的努力才能使其發揮作用。並且這是您最後一行Cat.prototype.constructor = Cat
進來的地方。
每個函數的prototype
屬性都有一個屬性,稱爲constructor
,它指向函數本身。因此,當您將該函數用作構造函數時,內部對象[[prototype]]
也具有constructor
屬性。
function Cat() {
}
var cat = new Cat();
console.log(Cat.prototype.constructor); //Cat
console.log(cat.constructor); //Cat
但是,如果你申請你的遺傳模式,重寫的Cat
完整prototype
財產及其所有屬性,包括constructor
財產。
function Cat() {
}
Cat.prototype = new Animal();
var cat = new Cat();
console.log(Cat.prototype.constructor); //Animal
console.log(cat.constructor); //Animal
爲了解決這個問題,我們必須手動設置constructor
屬性:
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
var cat = new Cat();
console.log(Cat.prototype.constructor); //Cat
console.log(cat.constructor); //Cat
我明白了!你不能做新的貓(),因爲如果我們這樣做,我們錯過了動物的所有屬性和方法。對? – user3162361
如果您閱讀參考文章,您會發現構造函數屬性不會執行任何功能,您可以使用它進行操作! – ColinE