1 传统形式 —-> 原型链
    可能会继承了没用的属性
    2 借用构造函数
    借用的是构造函数的方法 不能借用构造函数的原型
    且每次构造函数都要多走一个函数

    function Student(name,age,grade){
    Person.call(this,name,age);
    this.grade = grade;
    }
    //即这里Student借用Person的构造函数
    //但是原型还是Student.prototype 并没有把Person的原型借来
    3 共享原型
    多个函数共享一个原型
    但不能随便改动自己的原型

    function Person(){}
    function Son(){}
    function inherit(Target,Origin){
    Target.prototype = Origin.prototype;
    }
    inherit(Son,Person);
    //此时Son与Person共享Person.prototype原型
    //此时Son的原型改变也会导致Person原型的改变
    4 圣杯模式
    经过对共享原型的优化 使其即使改动过了自己的原型 也不会影响共享原型

    function inherit(Target,Origin){
    function F(){}
    //F起到中间人的作用
    F.prototype = Origin.prototype;
    //F与Origin共享原型
    Target.prototype = new F();
    //这里Target的原型是F 而F的原型才是Origin 这里有两层关系
    //所以即使某一边的原型发生改变 也不会影响其他的原型
    Target.prototype.contructor = Target;
    //这里本来 Target.proto —-> new F( ) 但F中没有构造方法 —-> Origin.prototype
    //所以我们需要人为的修改其所对应的contructor
    Target.prototype.uber = Origin.prototype;
    //这步可有可无 是为了方便找到自己的超类 即知道自己真正继承自谁

    }
    inherit(Son,Person);
    也可以这么写:
    var inherit = (function () {
    var F = function(){};
    //属性私有化
    return function(Target,Origin){
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.contructor = Target;
    Target.prototype.uber = Origin.prototype;
    }
    }( ) );