這是一個很好的繼承模式嗎?我從來沒有看到它在JavaScript繼承教程中討論,但有時在實際代碼中使用。你能否指出弊端和/或優於其他模式?在通過B.prototype = new A()的JavaScript繼承中,爲什麼需要設置B.prototype.constructor = B?
0
A
回答
0
由於構造函數現在指向構造函數(prototype屬性)的「A」 ,所以我們希望把它指向B()
B.prototype.constructor是一個指針到原來的構造函數時我們更改B的原型(B.prototype = new A()
)B.prototype.constructor失去對實際A()的引用並且將/指向B()。 注意新的A()仍然會調用默認的構造函數。
這裏只目的改回B()(B.prototype.constructor=B
)可以是,當在未來一段目的調用具有原型像B.prototype.constructor()
或B.prototype.constructor.call()
構造它不指向A()
實施例
function A(){
console.log("A")
}
function B(){
console.log("B")
}
B.prototype = Object.create(A.prototype);
new B() // Still console.logs "B"
B.prototype.constructor() // console.logs "A"
相關問題
- 1. 原型繼承。 obj-> C-> B-> A,但obj.constructor是A.爲什麼?
- 2. JavaScript:爲什麼我的`new`需要parens?
- 3. vector.push_back(B)和vector.push_back(new A((* B))),爲什麼行爲不一樣?
- 4. 爲什麼我們要用`Boy.prototype = new Human;`來模擬繼承?
- 5. JavaScript:當B從A繼承時,A中的回調看不到B
- 6. 爲什麼在繼承期間需要重置JavaScript構造函數?
- 7. 我爲什麼要繼承?
- 8. 爲什麼在javascript中繼承的原型是必需的
- 9. 爲什麼代理類需要JavaScript ES5原型繼承?
- 10. Javascript,爲什麼要「new Function()」?
- 11. 爲什麼我們需要在JavaScript中調用父構造函數繼承
- 12. 紅寶石:爲什麼我需要一個額外的「A + B」
- 13. JavaScript:繼承
- 14. 方法B用於方法A;在繼承類中,使A被覆蓋B
- 15. 爲什麼(A - B)。^ 2在MATLAB中不等於(B - A)。^ 2?
- 16. 爲什麼a.compareTo(b)等於compareTo(a,b)或a.method(b)= method(a,b)?
- 17. 爲什麼有A = A +之間的差異B和A + = B
- 18. Javascript繼承(通過Backbone源代碼),爲什麼Backrogate中的代理功能?
- 19. A == B對B == A,有什麼區別
- 20. 爲什麼代理模式需要繼承?
- 21. 爲什麼使用Javascript原型繼承?
- 22. ocaml GADT:爲什麼「鍵入a」。需要?
- 23. 需要WeakMap(A,B) - >Ç
- 24. 通過Javascript繼承CSS值
- 25. 用Object.create在Javascript中繼承
- 26. 什麼是JavaScript中的差異繼承?
- 27. 什麼時候需要在Javascript中設置類的'prototype.constructor'屬性?
- 28. 通過繼承
- 29. 什麼是A&B代表.Aggregate((a,b)=>聲明w/a&b)
- 30. a,b = b,a + b和a = b,b = a + b在fibonacci中的區別是什麼[Python]
*「你可以指出弊端和/或優於其他模式?」*請參閱我的[答案](http://stackoverflow.com/a/17393153/218196)。 – 2015-01-26 22:20:34
@FelixKling正在等待你的反應:爲上帝而歡呼。 – Mouser 2015-01-26 22:21:11
@ FelixKling謝謝,很好的回答,很透徹。儘管如此,它似乎並沒有解釋爲什麼這裏需要'B.prototype.constructor = B',是不是? B上總是有實際的構造函數,它是通過首先定義B隱式創建的,對吧?所以B.prototype.constructor永遠不應該使用,或者我錯過了什麼? – hubzkq1 2015-01-26 22:33:31