第十一节-面向对象补充继承最全

javascript继承的最后补充学习

一般的构造函数是这样写的

function Person(){
  this = new Object(); //用到new 的时候头尾两句就不用写
  this.name= name;
  this.age = age ;
  return this; 
 }

如果是这样写的话

Person.prototype.sayHello=function(){}
//就相当于在上面添加两行代码
Person.prototype={};
Person.prototype.constructor=Person;

如果是这么写

Person.prototype={
    constructor:person;//这行必须写,否则原型,实例,
  //  构造函数三者之间的关系没有办法打通
    sayHello:
}

比较靠谱的继承是这样写的

Student.prototype= new Person();
Student.prototype.constructor =Student;

现在假设有两个实例变量 stu1 ,stu2
给stu1的name属性值改变,

stu1.name="jenny";

调用父类的sayHello方法时,二者的sayHello的name值会不一样,如果做到stu1改变,stu2也改变呢?
解决方法

stu1.__proto__.name="jenny"; //在原型上进行改变,
  因为之前stu的原型已经被赋值为new Person(),也就是在父类的构造函数上改动

如何想要把父类的构造函数属性变成自己的

要在自己的构造函数里用到

 Person.call(this);

这种方法叫做构造方法借用。this指的是Student。这种是连父类方法也被借用过来。原型中也有这三种属性。但是Student已经有这三个属性了,父类的这三个属性就会变成undefined。

  function Tiger(breed,age,furColor){
  Animal.call(this,breed,age);
  this.furColor=furColor;
}

Tiger.prototype= new Animal(); //可以获得Animal对象的原型中的方法
Tiger.prototype.constrctor= Tiger;

不足之处,父类的某些东西我不想要,但是他都继承过来了。


最终的版本

Tiger.prototype=Object.create(Animal.prototype);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值