構建類的方法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.js
有addMethods
方法繼承
Mootools.js
有implement
方法
klass.js
有methods
和implement
方法
單純以構建類和繼承類的方式,我的認爲
Mootools.js
作的最好,子類和父類的構建方式統一,子類繼承父類時方法清晰,並且在具備面向對象特色的語言,都有extends
關鍵字,並且父類也是在extends
的後面
不習慣Prototype.js
在每一個須要拓展父類的同名方法的第一個參數中加$super
,畢竟Mootools
聲明瞭父類後,在同名方法中只須要加this.parent(args)
,而不用在參數內再加上須要聲明父類的強調
klass
的構建子類的方法和其餘兩個都不同,子類和父類的構建方式就直接加上父類的名字再加上extend
就能夠,拓展父類的同名方法的時候,使用this.supr(args)
來拓展。至關想吐槽的就是supr
這個名稱了,klass
的源碼中處處充滿了這種很差好命名的參數,以字母o
,甚至是what
來命名,真是特別的無語了,我會給做者提issue
的
關於源碼中具體差別,待續
JS
面向對象系列