javascript玩转继承(一)

什么是继承?这个我不想废话,有一只动物,有一个人,有一个女孩,这个就是一个最简单,也是典型的继承链。

在C#等面向对象中,很容易。

 

class Animal

{    }

class People:Animal

{    }

class Girl:People

{    }

 

那么在Javascript中,没有类,没有继承的提供实现,我们该怎么做呢?

  1. 对象伪装(构造继承法)

    什么是对象伪装呢?我们可能叫做构造继承更容易理解一些。顾名思义,就是用构造函数来玩继承。其实就是说把父类的构造函数当成是一个普通的方法,放到子类的构造函数中去执行,这样的话,当构造对象的时候,子类的对象当然就可以构造父类的方法啦!

    还是用上面的那个例子,代码如下:

    function Animal()

    {

            this.Run=function(){alert("I can run");};

    }

    function People(name)

    {

    //在这里就是传入了父类的构造方法,然后执行父类的构造方法,这个时候就//可以使用父类中的方法了。

            this.father=Animal;

            this.father();

            //记得要删除,否则在子类添加于父类相同名称的方法时,会修改到父类。

    delete this.Father;

    this.name=name;

            this.Say=function(){alert("My name is "+this.name);}

    }

    function Girl(name,age)

    {

            this.father=People;

            this.father(name);

            delete this.father;

            this.age=age;

            this.Introduce=function(){alert("My name is "+this.name+".I am "+this.age);};

    }

    这样的话就实现了一个继承链,测试下:

    var a=new Animal();

    a.Run();

    var p=new People("Windking");

    p.Run();

    p.Say();

    var g=new Girl("Xuan",22);

    g.Run();

    g.Say();

    g.Introduce();

    结果如下:

    a.

    b.

    c.

    d.

    e.

    f.

    测试成功!

    我们来总结一下这段代码的关键,指定父类,声明父类对象,然后删除临时变量,您是否觉得有些麻烦呢?至少我是这么觉得的,一旦忘记了delete,还要承担父类被修改的风险,针对这个,我们对这个用call和apply来改进!

    接着看代码,还是上面的例子(为了更加容易大家理解,需求改变一下,Animal有了名字):

    function Animal(name)

    {

            this.Run=function(){alert("I can Run");};

    }

    function People(name)

    {

            //使用call方法实现继承

    this.father=Animal;

            this.father.call(this,name);

            this.name=name;

            this.SayName=function(){alert("My name is "+this.name;);};

    }

    function Girl(name,age)

    {

            //使用apply方法来实现继承

            this.father=People;

            this.father.apply(this,new Array(name));

            this.age=age;

            this.Introduce=function(){alert("My name is "+this.name+".I am "+this.age);};

    }

    用一样的测试代码,发现测试一样成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值