// 构造函数
function Animal() {
this.species = "动物";
}
function Cat(name, color) {
this.name = name;
this.color = color;
}
// 1, 使用call或者apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行
// function Cat(name, color) {
// Animal.apply(this, arguments);
// this.name = name;
// this.color = color;
// }
// var cat1 = new Cat(‘大猫‘,‘黄色‘);
// console.log(cat1);
// 2. 第二种 prototype属性
// 第一行,将prototype对象指向一个Animal的实例
// Cat.prototype = new Animal();
// 第二行,constructor属性,指向它的构造函数,
// 如果没有Cat.prototype = new Animal(),Cat.prototype.constructor指向Cat
// 现在指向Cat.prototype.constructor指向Animal
// Cat.prototype.constructor = Cat;
// var cat1 = new Cat(‘大毛‘,‘黄色‘);
// console.log(cat1);
// 3.直接继承prototype
// function Animal() {
// }
// Animal.prototype.species = "动物";
// Cat.prototype = Animal.prototype;
// Cat.prototype.constructor = Cat;
// var cat1 = new Cat(‘大毛‘,‘黄色‘);
// console.log(cat1.species);
// 5. 拷贝继承
// function Animal() {}
// Animal.prototype.species = "动物";
// function extend(Child, Parent) {
// var p = Parent.prototype;
// var c = Child.prototype;
// for(var i in p) {
// c[i] = p[i];
// }
// c.uber = p;
// }
// extend(Cat,Animal);
// var cat1 = new Cat(‘大毛‘,‘黄色‘);
// console.log(cat1);
摘自阮老师的博客:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html