Javascript玩转继承(三) |
本文标签:Javascript,玩转继承 首先,我们来看非主流继承一:实例继承法 。 我也不说那么多废话了,既然是非主流继承,就一定不常用,既然不常用还存在,那就只有一个因素,他用于特定的场合 。实例继承法,就主要用于核心对象的继承,也是目前为止唯一能够解决核心对象继承的方式 。 核心对象的继承拥有一定的价值,比如说Error对象,我们公司可能要自己实现一个Error 类来简化今后的开发,那么这个时候我就要使用实例继承法来继承Error 。 代码如下: 复制代码 代码如下: function ExtendingError(mes) { var instance=new Error(mes); instance.NewError=function(){ alert("Your Error is "+mes); } return instance; } 好,测试下: 复制代码 代码如下: var e=new ExtendingError("Your number is less than one"); e.NewError(); alert(e.toString()); 结果让我们满意: 好,废话不多说,这个是非主流继承方式,基本只用于核心对象的继承,记住就好! 顾名思义,拷贝继承,就是通过拷贝实现对象的继承,拷贝什么呢?很明显,就是对象的属性和方法,还记得Javascript中,类其实就一个Hashtable么?如果想不起来的话,就回去复习一下基础,我可能会在过一段时间写一篇关于Javascript对象的知识 。 复制代码 代码如下: Function.prototype.Extend=function(){ for(var pro in obj) { //这样其实就是把父类的属性和方法完全复制过去了 this.prototype[pro]=obj[pro]; } } 好了,再写段代码看下如何使用: 复制代码 代码如下: function Animal() { } function People() { } People.Extend(new Animal()) { } 明眼人一眼看出来,这个方法的缺点太明显了: 总之,这个方法一般情况下不用 。 好了,下面说个常用的东西 。混合继承! 复制代码 代码如下: function People(name) { this.name=name; this.SayName=function(){ alert("My name is "+name); } } function Girl(name,age) { //构造继承 this.father=People; this.father(name); delete this.father; this.Introduce=function(){ alert("My name is "+name+".I am"+age); } } //原型继承 Girl.prototype=new People(); 好了,两种方式的混合,现在看看,是不是问题解决了呢? var g=new Girl("Xuan",22); alert(g instanceof People); g.SayName(); g.Introduce(); 测试通过! |