您好,欢迎访问一九零五行业门户网

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对象的知识。
了解了这个就好办了,直接看代码:
首先写一个extend方法:
复制代码 代码如下:
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();
测试通过!
这是一个相对完美的解决方案,但是却增加了代码的复杂度,所以具体的方案还要靠大家在实践中去选择。
javascript玩转继承的方式就这些,欢迎大家继续关注我的其他文章。
其它类似信息

推荐信息