继承 : 子类继承父类的属性和方法
好处 : 减少代码量, 公共的父类可以复用. 降低耦合度.
JS里实现继承的方法 :
1. 通过改变构造构造函数中对象的指向实现继承
2. 通过原型链实现继承.
function Animal(){
this.species = "哺乳动物";
this.place = "地球";
}
function Cat(){
Animal.call(this);
this.name = "加菲";
this.color = "橘色"
}
var cat = new Cat(); //new出一个实例
改变调用对象的方法 :
1. call() 参数1: 要改变成的对象, 参数2: 往后多个参数: Fun的参数
2. apply() 用法及与call的区别>>
var obj = {};
function test(a,b,c){
console.log(this,a,b,c);
}
test.call(obj,1,2,3);
test(); //{},1,2,3
原型链实现继承 :
使用构造函数的prototype 属性, 如果Cat 构造函数的原型对象被赋值成了 Animal 构造函数的实例对象, 因为所有Cat 构造函数的实例对象都会拥有自己构造函数原型对象里的 所有属性和方法, 所以Cat构造函数的实例对象里 就会拥有Animal 构造函数里的所有属性和方法.
无法通过construtor 属性找到自己的构造函数
Cat.prototype = new Animal();
var cat1 = new Cat();
console.log(cat1.species, cat1.place);
//修复 constructor 问题
Cat.prototype.constructor = Cat;