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);