總結:prototype.js,Mootools.js和klass.js 實現類的方法的異同與優劣

構建類的方法javascript

  • Prototype.js使用Class.create來構建類java

  • Mootools.js使用new Class來構建類segmentfault

  • klass.js使用klass來構建類函數

繼承父類的方法this

  • Prototype.js使用Class.create(ParentClassName,{//子類方法})構建子類,繼承父類,在與父類同名的方法中,第一個參數爲$super,方法體內使用$super(args)來拓展父類的同名方法prototype

  • Mootools.js使用new Class正常構建類後,第一個方法使用Extends:ParentClassName來繼承父類,在子類的方法體中,使用this.parent(args)來拓展父類的同名方法設計

  • klass.js使用ParentClassName.extend(//子類方法)來繼承父類,在子類的方法體中使用this.supr(args)來拓展父類的同名方法code

在類的外面給類添加函數,名稱雖然不同,但調用的方式都同樣,對象

  • Prototype.jsaddMethods方法繼承

  • Mootools.jsimplement方法

  • klass.jsmethodsimplement方法

單純以構建類和繼承類的方式,我的認爲

  • Mootools.js作的最好,子類和父類的構建方式統一,子類繼承父類時方法清晰,並且在具備面向對象特色的語言,都有extends關鍵字,並且父類也是在extends的後面

  • 不習慣Prototype.js在每一個須要拓展父類的同名方法的第一個參數中加$super,畢竟Mootools聲明瞭父類後,在同名方法中只須要加this.parent(args),而不用在參數內再加上須要聲明父類的強調

  • klass的構建子類的方法和其餘兩個都不同,子類和父類的構建方式就直接加上父類的名字再加上extend就能夠,拓展父類的同名方法的時候,使用this.supr(args)來拓展。至關想吐槽的就是supr這個名稱了,klass的源碼中處處充滿了這種很差好命名的參數,以字母o,甚至是what來命名,真是特別的無語了,我會給做者提issue

關於源碼中具體差別,待續


JS面向對象系列

相關文章
相關標籤/搜索