构造方法继承、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方法会报错

Dog中使用的apply方法继承,原理和call是一样的。所以dog也没有info方法,调用会报错
Pig在继承的时候,把从父对象继承过来的属性和方法都放在了自身的属性pi上面,所以要通过此属性才能获取到,如下

构造继承在课程里面有讲过,建议同学在复习一下视频哦。
2.构造继承可以继承父对象的属性和方法。
3.call和apply不可以继承父对象原型的属性和方法。
4.原型继承可以继承父对象自身的属性和方法,例如如下
Dog的原型继承了Animal所有的属性和方法

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

祝学习愉快 ,望采纳。
相似问题