构造方法继承、call、apply继承、原型继承能继承父对象中属性的范围

来源:6-5 构造继承

慕粉1474289878

2019-06-04 20:57:03

function Animal(name,counts){

            this.name = name;

            this.counts = counts;

            this.getinfo = function(){

            alert('动物'+this.name+'数量'+this.counts);

        }

        }

        Animal.prototype.info=function(){

        alert('动物'+this.name);

        }


        

        function Cat(name,counts){

        Animal.call(this,name,counts);

        }

        function Dog(name,counts){

        Animal.apply(this,[name,counts]);

        }


        function Pig(name,counts){

        this.pi = new Animal(name,counts);

        //this.pi(name,counts);

        }


        var cat = new Cat("mao",10);

        cat.getinfo();

        cat.info();//报错

        var dog = new Dog('gou',20);

        dog.getinfo();

        dog.info();//报错

        var ani = new Animal('HOU',89);

        ani.getinfo();

        var pig = new Pig('zhu',100);

        pig.getinfo();//报错

        pig.info();//报错

问题:1、代码中为什么报错   2、构造继承能否继承父对象的方法  3、call和apply不能继承父对象的__proto__吗    4.原型继承能否继承父对象中的不是obj.prototype.fun()的方法,请详解

写回答

1回答

好帮手慕夭夭

2019-06-05

你好同学,解答如下:

Cat通过call方法能够继承Animal自身的属性和方法,不能继承它原型上面的属性和方法。所以Cat调用info方法会报错

http://img.mukewang.com/climg/5cf729140001b49311440203.jpg

Dog中使用的apply方法继承,原理和call是一样的。所以dog也没有info方法,调用会报错

Pig在继承的时候,把从父对象继承过来的属性和方法都放在了自身的属性pi上面,所以要通过此属性才能获取到,如下

http://img.mukewang.com/climg/5cf72a1f000155e607120686.jpg

构造继承在课程里面有讲过,建议同学在复习一下视频哦。

2.构造继承可以继承父对象的属性和方法。

3.call和apply不可以继承父对象原型的属性和方法。

4.原型继承可以继承父对象自身的属性和方法,例如如下

Dog的原型继承了Animal所有的属性和方法

http://img.mukewang.com/climg/5cf72c940001971d06820168.jpg

实例化Dog可以测试,可以调用到父对象自身上面的方法。

http://img.mukewang.com/climg/5cf72d040001597703420155.jpg

祝学习愉快 ,望采纳。

0

0 学习 · 14456 问题

查看课程