总结:prototype.js,Mootools.js和klass.js 实现类的方法的异同与优劣

构建类的方法

  • Prototype.js使用Class.create来构建类

  • Mootools.js使用new Class来构建类

  • klass.js使用klass来构建类

继承父类的方法

  • Prototype.js使用Class.create(ParentClassName,{//子类方法})构建子类,继承父类,在与父类同名的方法中,第一个参数为$super,方法体内使用$super(args)来拓展父类的同名方法

  • Mootools.js使用new Class正常构建类后,第一个方法使用Extends:ParentClassName来继承父类,在子类的方法体中,使用this.parent(args)来拓展父类的同名方法

  • klass.js使用ParentClassName.extend(//子类方法)来继承父类,在子类的方法体中使用this.supr(args)来拓展父类的同名方法

在类的外面给类添加函数,名称虽然不一样,但调用的方式都一样,

  • 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面向对象系列

  • 《javascript高级程序设计》 继承实现方式

  • prototype.js 是如何实现JS的类以及类的相关属性和作用

  • Mootools.js 是如何实现类,以及类的相关属性和作用

  • klass 是如何实现JS的类以及类的相关属性和作用

你可能感兴趣的:(面向对象编程,oop,前端,javascript)