所以我來自Python並試圖圍繞原型是什麼。無論如何,我可以得到一個原型的Pythonic描述?這種聽起來像一個描述符有一個嬰兒init。另外,我聽說Prototype在使用DOM時往往會產生負面影響。真的嗎?如果是這樣,爲什麼?謝謝,我一直在瀏覽大量的文章,而Prototype在這一點上對我來說毫無意義!關於原型的細節
關於原型的細節
回答
在Javascript中,很像Python,一切都是對象。這包括功能。
雖然Javascript沒有類。但是,您可以使用函數來模擬類的行爲。
所有功能都有一個名爲prototype
的屬性。 如果你說:
myInstance = new myFunction()
myFunction
運行。 (所以它就像一個構造函數)並且結果存儲在myInstance
中。這裏沒什麼瘋狂的,但new
關鍵字所做的是將prototype
屬性從myFunction
複製到myInstance
的內部屬性。該文檔在文檔中被稱爲[[prototype]]
,您可以在一些現代瀏覽器中將其引用爲__proto__
。 __proto__
雖然沒有標準化,所以不鼓勵使用它。
如果您需要獲取物體的[[prototype]]
,而不是使用__proto__
,請使用Object.getProtoTypeOf(myInstance)
。
MyClass.prototype == Object.getPrototypeOf(myInstance) //true
當調用對象的方法,如果對象沒有該方法,使用Javascript將查找其[[prototype]]
財產。它將繼續搜索原型(又名繼承)鏈,直到它達到Object
。
因此,作爲一個例子:
function MyClass() {
this.prop ="hello"
//Javascript implicitly returns `this` when the function is invoked using "new"
}
MyClass.prototype.instanceMethodOne = function() {
console.log(this.prop);
}
var myInstance = new MyClass();
myInsance.instanceMethodOne(); //"hello"
在上述例子中,myInstance
將有一個稱爲prop
屬性。但它不會有名爲instanceMethodOne
的房產。此屬性已添加到MyClass
的原型對象。但是,對該對象的引用被複制到myInstance
的[[prototype]]
(又名)__proto__
屬性中,因此它是可訪問的。
你現在有一種情況,所有的實例都有自己的狀態,它是在構造函數中創建的(只是一個普通函數),但是它們共享添加到函數原型屬性的狀態。這就是你如何在Javascript中獲得「類」。
將這些事情稱爲類並不好,稱它們爲_Constructors_ –
查看構造函數來解釋JavaScript原型......也許不是最好的主意。 –
@Kyll什麼是解釋它們的更好方法?關於對象藍圖的一些過於複雜的隱喻? ;)請隨時添加您自己的答案。我會高興地投票。這只是我解釋它的方式,它在技術上是準確的。 – LukeP
- 1. 關於JavaScript的原型關於JavaScript的原型
- 2. 關於JavaScript原型
- 3. 關於原型和原型js
- 4. 關於承諾的細節;示例
- 5. 關於JavaScript數組原型
- 6. @ Html.DisplayNameFor的細節模型
- 7. 關於原型的點擊功能Javascript
- 8. 關於javascript的原型和參數
- 9. 關於javascript中原型的問題
- 10. 關於JSON的原型鏈是什麼?
- 11. 關於JavaScript的原型和構造
- 12. Django的 - 查詢集獲得所有相關的細節模型
- 13. 反應原生動態ListView主細節
- 14. 反應原生Android設置細節
- 15. TClientDataset在主細節不關閉細節查詢
- 16. UITableView的原型細胞錯誤EXC_i386_INVOP
- 17. 如何找出關於m3u8流的細節?
- 18. 關於主/細節流模板的兩個問題
- 19. Tkinter的部件回撥,以確定細節關於此微
- 20. 解釋一些關於字符串的細節
- 21. 關於mybatis的參數類型爲原始數據類型?
- 22. 尋找page_stories_by_story_type的類型細節和page_consumptions_by_consumption_type
- 23. ScriptEngine.ExecuteFile的細節
- 24. MapView的細節
- 25. 相當於原型
- 26. 關聯映射細節混淆?
- 27. 關於jQuery的活細小的問題()
- 28. 建議 - 如何模型細節列表
- 29. 在主細節關係中保留詳細信息EF4 POCO
- 30. 關於'this'的混淆和JavaScript中的原型設計
我想_a原型的pythonic描述應該是['prototype.py'](https://github.com/airportyh/prototype.py),但是這是原型到_Python_的實現。 _古典語言_以與古典_Class_不同的方式進行代碼重用,這不是一個簡單的翻譯。 –
@PaulS。謝謝,prototype.py的一個快速谷歌帶我到一個非常有用的網站,它聽起來像一個並不遙遠。糾正我,如果我錯了,但你可以定義變量和設置默認值(如init)。此外,您可以添加類似於部分的自定義函數或使用裝飾器或覆蓋內置函數(如print)(類似於描述符覆蓋__getattr__的能力)? –
我也試圖在這方面找到一些見解,並且偶然發現了這篇文章http://aaditmshah.github.io/why-prototypal-inheritance-matters/。希望能幫助到你。 – bbill