SOURCE

function Animal(name) {
    this.name = name || 'Animal';

    this.sleep = function() {
        console.log(this.name + "正在睡觉");
    }
}


Animal.prototype.eat = function(food) {
    console.log(this.name + "正在吃" + food);
}


// 原型链继承
// function Cat() {}
// Cat.prototype = new Animal();
// Cat.prototype.name = 'cat';

// var cat = new Cat();
// console.log(cat.name);
// cat.eat('fish');
// cat.sleep();
// console.log(cat instanceof Animal);
// console.log(cat instanceof Cat);

// const cat = new Animal('cat');
// console.log(cat.name);
// cat.sleep();
// cat.eat('fish');

// 构造继承
// function Cat(name) {
//     Animal.call(this,name);
//     // this.name = name || 'Tom';
// }

// var cat = new Cat('Tom');
// console.log(cat.name);
// cat.sleep();
// console.log(cat instanceof Animal);
// console.log(cat instanceof Cat);

// 实例继承

// function Cat(name) {
//     var instance = new Animal();
//     instance.name = name || 'Tom';
//     return instance;
// }

// var cat = new Cat();
// console.log(cat.name);
// cat.sleep();
// console.log(cat instanceof Animal);
// console.log(cat instanceof Cat); 

// 拷贝继承
// function Cat(name) {
//     let animal = new Animal();
//     for(var p in animal) {
//         Cat.prototype[p] = animal[p];
//     }
//     this.name = name || 'Tom';
// }

// var cat = new Cat();
// console.log(cat.name);
// cat.sleep();
// console.log(cat instanceof Animal);
// console.log(cat instanceof Cat);

// 组合继承
// function Cat(name) {
//     Animal.call(this);
//     this.name = name || 'Tom';
// }

// Cat.prototype = new Animal();

// Cat.prototype.constructor = Cat;
// var cat = new Cat();
// console.log(cat.name);
// cat.sleep();
// console.log(cat instanceof Animal);
// console.log(cat instanceof Cat);

// 寄生组合继承
function Cat(name) {
    Animal.call(this);
    this.name = name || 'Tom';
}

var Super = function() {};
Super.prototype = Animal.prototype;
Cat.prototype = new Super();

const cat = new Cat();
console.log(cat.name);
cat.sleep();
console.log(cat instanceof Animal);
console.log(cat instanceof Cat);
console 命令行工具 X clear

                    
>
console