我一直在閱讀javascript的constructor
和__proto__
。我想我明白__proto__
屬性的基本知識,但是我對constrcutor
屬性有點麻煩。這是我目前爲止所瞭解的有關這兩個屬性的信息,如果我錯了,請糾正我,或者如果我錯過了某些要點,請添加。 javascript中的每個對象都有一個名爲__proto__
的「隱藏」屬性,默認情況下指向Object.prototype
。現在,當使用new創建對象的實例時。修改此屬性的值並分配對象ConstructorName.prototype
。我不確定什麼__proto__
的默認值是在調用new
之前。現在關於.constructor
我有點困惑我看了this,到目前爲止認爲constructor
屬性默認是空的,當新的被調用時constrcutor
被修改並分配了ConstructorName.prototype.constructor
。請讓我知道我是否朝着正確的方向前進。關於構造函數和__proto__屬性的說明
0
A
回答
1
在javascript每個對象都有一個 「隱藏」 的屬性稱爲
__proto__
號隱藏屬性稱爲[[原型]]。 .__proto__
是訪問它棄用吸氣,你應該使用Object.getPrototypeOf
它默認指向
Object.prototype
。
「default」可能會引起誤解 - 取決於對象的創建方式。對於普通對象文字,是的,它是Object.prototype
。
現在,當一個對象的實例使用new創建。此屬性的值將被修改並分配給對象
ConstructorName.prototype
。我不確定__proto__
的默認值是在新的被調用之前。
在此之前沒有任何價值。該對象是在原型從一開始就被設置的情況下創建的。在調用new
之前,沒有任何對象。
現在關於
.constructor
我有點困惑我讀到這也是迄今爲止相信在默認情況下是constructor屬性是空的,被調用的新當constrcutor被修改,分配ConstructorName.prototype.constructor
。
不,沒有任何東西被分配到任何地方,沒有.constructor
屬性的實例。他們做繼承財產(連同其他人)從.prototype
對象。 在創建ConstructorName
函數的實例中創建了ConstructorName.prototype.constructor
屬性。
相關問題
- 1. Javascript:爲什麼是構造函數的__proto__屬性Empty(){}?
- 2. 構造函數的__proto__屬性指向什麼?
- 3. 基於構造函數參數屬性
- 4. 關於HTML5 pubdate屬性的說明
- 5. 構造函數的屬性
- 6. 設置__proto__一個構造函數
- 7. JavaScript繼承:在構造函數中使用__proto__而不是構造函數的prototype屬性
- 8. rails中的屬性和構造函數
- 9. Typescript和__proto__屬性
- 10. JavaScript繼承和構造函數屬性
- 11. 關於數據結構的說明
- 12. Javascript - 在構造函數或構造函數的prototype屬性中設置屬性?
- 13. 關於繼承和構造函數
- 14. 關於拷貝構造函數和NRVO
- 15. C關於遞歸函數的說明
- 16. __proto__實例和其構造的在JavaScript
- 17. 關於帶參數的構造函數
- 18. 屬性說明
- 19. 在構造函數旁聲明的屬性
- 20. Accesing構造函數的基類屬性
- 21. 屬性構造函數的默認值?
- 22. JavaScript的構造函數和屬性和對象屬性的可見性
- 23. 構造函數參數春季屬性
- 24. 有關EclipseLink JPA屬性的說明
- 25. 爲什麼和如何__proto__記得構造函數的未定義原型成員的舊屬性?
- 26. 關於java構造函數的困惑
- 27. 關於構造函數的問題
- 28. 關於C++構造函數的問題
- 29. 關於構造函數的困惑
- 30. C++:「錯誤C4430:缺少類型說明符 - 假定INT」對於構造和無效的聲明析構函數
感謝您的帖子。你提到「在調用new之前,沒有任何對象」,在這個問題的部分我要問的是,當我們在這種情況下聲明一個普通對象(即)'foo = {}'時,默認的'foo .__ proto__ = Object.prototype',一旦我們通過做'var f = new foo()'來創建一個實例,那麼'f .__ proto__ = foo.prototype'我是否正確? –
是的。 'foo = {}'等價於'foo = Object.create(Object.prototype)','f = new foo'等同於'f = Object.create(foo.prototype); f.constructor()' – Bergi
好的感謝清理。你提到的最後一個問題是「實例上沒有.constructor屬性,它們繼承了.prototype對象的屬性(以及其他屬性)。」 。第一個例子中的鏈接http://javascript.info/tutorial/constructor似乎表明該實例具有屬性'.constructor'(ie)'alert(rabbit.constructor == Rabbit)// true'我是一個這裏一點困惑。我在這裏詳細介紹嗎? –