继承
继承的概念
在JavaScript中,继承就是当前对象可以使用其他对象的方法和属性。
var animal = {
    name:"Animal",
    sex:"male",
    age:5,
    bark:function(){
        console.log("Animal bark");
    }
};
var dog = {};
//当前有两个对象,一个animal,一个dog
//dog没有属性和方法
//但是我们知道,dog属于animal,所以animal的方法和属性,都可以被dog使用
//如何让dog可以使用animal的属性和方法呢?
//通过继承就可以实现
继承的实现方式
在上一节内容中,最终的结论就是可以通过继承来让dog对象可以使用animal对象的属性和方法,那怎么实现继承呢?
1. 最简单的继承实现
直接遍历父对象的属性,将所有的属性加到当前对象上
var animal = {
    name:"Animal",
    sex:"male",
    age:5,
    bark:function(){
    console.log("Animal bark");
    }
};
var dog = {};
for (var k in animal){
    dog[k]= animal[k];
}
2. 原型继承
每一个构造函数都有prototype原型属性,通过构造函数创建出来的对象都继承自该原型属性。所以可以通过更改构造函数的原型属性来实现继承。
function Dog(){
    this.type = "yellow Dog";
}
function extend(obj1, obj2){
    for (var k in obj2){
        obj1[k] = obj2[k];    
    }
};
//使用混入的方式,将属性和方法添加到构造函数的原型属性上,构造函数所创建出来的实例就都有了这些属性和方法。
extend(Dog.prototype, {
    name:"",
    age:"",
    sex:"",
    bark:function(){}
})
//使用面向对象的思想把extend方法重新封装
//extend是扩展的意思,谁要扩展就主动调用extend这个方法
//所以extend应该是对象的方法,那现在我们要扩展的是构造函数的原型对象
//所以给构造函数的原型对象添加一个extend方法
//如下:
Dog.prototype.extend = function(obj){
    for (var k in obj){
        this[k]=obj[k];
    }
}
//调用方式就变成了下面这种形式
Dog.prototype.extend({
    name:"",
    age:"",
    sex:"",
    bark:function(){}
});