深入理解javascript原型和閉包(7)——原型的靈活性


在Java和C#中,你可以簡單的理解class是一個模子,對象就是被這個模子壓出來的一批一批月餅(中秋節剛過完)。壓個啥樣,就得是個啥樣,不能隨便動,動一動就壞了。

而在javascript中,就沒有模子了,月餅被換成了面團,你可以捏成自己想要的樣子。

 

首先,對象屬性可以隨時改動。

對象或者函數,剛開始new出來之后,可能啥屬性都沒有。但是你可以這會兒加一個,過一會兒在加兩個,非常靈活。

在jQuery的源碼中,對象被創建時什么屬性都沒有,都是代碼一步一步執行時,一個一個加上的。

 

其次,如果繼承的方法不合適,可以做出修改。

如上圖,Object和Array的toString()方法不一樣。肯定是Array.prototype.toString()方法做了修改。

同理,我也可以自定義一個函數,並自己去修改prototype.toString()方法。

 

最后,如果感覺當前缺少你要用的方法,可以自己去創建。

例如在json2.js源碼中,為Date、String、Number、Boolean方法添加一個toJSON的屬性。

如果你要添加內置方法的原型屬性,最好做一步判斷,如果該屬性不存在,則添加。如果本來就存在,就沒必要再添加了。

---------------------------------------------------------------------------

本文已更新到《深入理解javascript原型和閉包系列》的目錄,更多內容可參見《深入理解javascript原型和閉包系列》。

另外,歡迎關注我的微博

學習作者教程:《前端JS高級面試》《前端JS基礎面試題》《React.js模擬大眾點評webapp》《zepto設計與源碼分析》《json2.js源碼解讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM