javascript的杂谈1

是一种基于对象的语言,对于实现继承,网上也有很多方法,但是感觉各种实现都没那么干净利落。

首先谈谈自己对javascript的对象简单的理解,相比较静态面向对象语言的元数据不可变,javascript中,一切基于对象,包括对象的原型链、构造函数等都是可变的(自己觉得应该是元数据的东西,当然他们如果他们不可变,javascript就不是javascript了)。这让自己以前习惯的处理对象关系方法无法适从,总觉得不踏实,毕竟他们是可变的。虽然可变有可变的好处,但是对于静态面向对象语言来说,继承都是语言级别的实现。而javascript中他们实现的途径各种各样,但是基本都是借助原型或者通过其他方式实现自己的继承关系。

对于javascript中的对象以及继承,自己觉得可能更适合基于规则或者契约来构建,毕竟他太灵活了,扩展性也很强。这种灵活和扩展带来的好处不用多说,但是问题也同样多,当然很多问题是人为造成的。灵活容易造成不规范不统一,造成交流困难。

对于javascript实现继承的复杂性,首先,继承的本质其实也是重用,而在javascript中,像比静态语言,javascript重用的不仅仅是结构,他还能重用状态[原型是一个对象],同时对于对象的任何属性(包括函数),都是可以脱离对象单独存在但是仍然可以访问当前对象上下文(他们本身就是对象,而且可以访问绑定的对象this),所以同样可以单独重用其他对象的属性和方法。大部分框架都提供多种扩展方法。也因为javascript中对象各种属性和方法的独立型,所以即便是在构造时规范好继承关系,通过对象的属性和方法添加删除修改,这种关系也很难说还是原来的关系。所以觉得这种关系只能用来规范或者作为设计约束,而实际上无非保证这种关系的持久性。同时对于面向对象中组合优于继承来看,扩展应该比继承容易得多,尤其对于javascript,相信include和extend对于很多人来并不陌生。当然继承也有他的用武之地,尤其是约束对象关系的时候。但是继承的实现,如果不是使用环境特别苛刻,继承的实现只是选择性问题。

相关推荐