javascript实现继承的六种方式

​
/*实现继承的六种方式*/
    /*1.扩展原型对象的方法实现继承*/
    function Foo1(){}
    //在Foo1函数上扩展一个fn1方法,由构造函数创建的对象都具有fn1这个方法
    Foo1.prototype.fn1=function(){};
    /*2.替换原型对象实现继承*/
    function Foo2(){}
    //给Foo2函数的原型对象重新赋值,注意不要忘记添加constructor属性
    Foo2.prototype={
        constructor:Foo2,
        fn1:function(){},
        fn2:function(){}
    };
    /*3.混入继承*/
    //已知两个对象,obj2对象继承obj中的属性
    obj={name:"张三",age:16};
    obj2={};
    for(var key in obj){
        obj2[key]=obj[key];
    }
    //封装一个函数
    function mixin(target,source){
        for(var key in source){
            target[key]=source[key];
        }
        return target;
    }
    //jQuery中的extend方法就使用了混入继承
    /*4.混入+原型继承*/
    //给Foo4.prototype混入一些新的方法
    function Foo4(){}
    mixin(Foo4,{fn1:function(){},fn2:function(){}});
    //jQuery中的jQuery.fn.extend()就是使用了这个方法
    /*5.经典继承*/
    var obj5={name:"liying",age:18};
    function Foo5(){};
    Foo5.prototype=obj5;
    //封装一个方法
    function getFun(obj5){//传入已知的对象
        function F(){}
        F.prototype=obj5;
        return new F();//将继承创建的对象返回
    }
    //经典继承在ES5中得到了实现,Object.create()
    /*6.借用构造函数实现继承*/
    function Foo6(name,age){
        this.name=name;
        this.age=age;
    }
    function NewFoo(name,age,number){
        Foo6.call(this,name,age);
        this.number=number;
    }
    //newFoo构造函数借用Foo6构造函数中的属性和方法
    var obj = new NewFoo("张三",18,10);
    console.log(obj);//NewFoo {name: "张三", age: 18, number: 10}
​

  

原文地址:https://www.cnblogs.com/itlyh/p/6045783.html