javascript面向对象之我解
2010-09-14 13:32:52 来源:WEB开发网3、一个类(class1)的prototype就是这个类的一个不完全实例(之前没有相通这点,仔细看看prototype模式,自然就可以明白)。不完全实例是指prototype不包括内联定义的方法和属性。这样,自然可以理解“类的实例实际上也是一个prototype”了。
4、到现在为止,可以看到js中除掉简单类型,所有的类型和实例都是object类型,即便是神秘的prototype也是(其实理解了prototype也只是一个object而已,也就不再神秘了)。所以prototype可以动态增加方法和属性。
笔者是边写边想,边想边写,因此又想到一个有趣的问题,其实在js的实现中就有一个很棒的继承实现,即一个类(class1)是对其prototype(class1.prototype)的继承,子类化的部分就是类定义中的内联部分。所以类的实例有了所有的内联和prototype中的所有方法和属性,而且也有合理的覆写行为--子类可以覆写父类的方法和属性。缺点主要在于类的所有实例都引用了类的prototype,因此对类的prototype的修改会影响到所有实例。其实再想想,这也算不上是缺点,因为我们的思维固化在静态语言的模式中。对于动态语言,语言本身提供了大量不可思议的功能,很多在静态语言中不可能的事情可以实现了,然而陷阱也更多了,很多问题需要语言的使用者依靠编程习惯和技能来避免,对语言使用者的要求更高一些。对于这个所谓的缺点,一个有益的场合是我们确实需要修改所有实例的行为,这时它反过来是一个大大的优点(接下来的实例中会经常看到这种应用)。回到这个问题来,一般而言我们其实不会修改类的prototype的。现实中最有可能产生问题的应该是prototype中定义的object类型的复杂属性,这个在《javascript的prototype继承》有详细讲解。
Tags:javascript 面向 对象
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接