代码改变世界

Pro javascript学习笔记之两种继承方式的比较(classical inheritance and prototypal inheritance)

2008-09-24 15:38  wlstyle  阅读(498)  评论(0)    收藏  举报

比较传统继承和原型继承(Comparing Classical and Prototypal Inheritance)

    传统继承和原型继承创建对象的方式非常不同,通过他们创建出来对象的特性也不尽相同。这两种方式创建的对象有各自的有点和缺点,我们要在不同的应用环境中根据他们的特性来使用。

    传统的继承容易理解。Javascript中几乎所有的面向对象的代码都以这种方式实现。如果你写一个API以便更广泛的应用,或者如果在你项目中的同事对原型继承不怎么熟悉那么使用传统的继承比较好。Javascript是唯一采用原型继承且广泛使用的语言。所以产生的结果就是很多人对这种继承方式和不熟悉。同样会被一个对象 又链接到他的原型对象这种情况搞乱。一些开发者没有完全理解原型继承这中继承方式和继承本身的意义上相反。父类从他的子类继承相关属性。

      原型继承内存效率非常高。因为他以原型链的方式读取成员。所有的对象公用一个属性和方法的副本。直到这些属性和方法写入并指向复制对象(cloned object)本身。与这种方式相对应的是,传统继承创建对象的方式创建的对象在内存中有一个各自的属性和私有方法的副本。如此原型继承节省内存使用是显而易见的。原型继承也比较的节省代码,中间只需要添加一个cloned函数。而不需要复杂的代码比如SuperClass.Call(this,argumnet)和SubCloss.prototype=new SuperClass(),不要认为原型继承简单它同样复杂。他的强大依赖于它的简单。

   决定用哪种继承方式取决与你对某种方式的偏爱。有一些人选择了简单使用的原型继承,而另外一部分人则选择了比较亲切的传统继承。