JavaScript继承模式

小编在上一篇博客之中所提及到的原型链其实是一种抽象的继承模式,通过prototype继承父亲属性,但这样的实际操作在对象上,每当需要继承属性那么就是要创建实际对象去实现继承,显然不是一个很好的继承模式,知识补充今天小编在介绍几种继承模式。

一、call、apply方法

作用:改变this指向

区别:传参列表不同

我们通过一个实际案例来看

function Father(name,age,hobby){
            this.name=name;
            this.age=age;
            this.hobby=hobby;
        }
        function Son(name,age,hobby,grade){
            Father.call(this,name,age,hobby);
            this.grade=grade;
        }
        var son=new Son("xiaozhuan",13,"football","2000");

  这样继承父亲中的对象可以减少代码的耦合。

apply方法与call实现功能一样Father.apply(this,[name,age,hobby]);

call和apply还有一种引用:假设一个对象a中有一个方法b,还有一个c对象  a.b.call(c); 意思是使c对象调用a中的b方法。apply类推一样的,当我们改变改变this指向时放入call括号内还可以放入调用方法的参数,看下面例子:

  var arr =[1,2,3,4,5,6,7]
        var arr1=Array.prototype.slice.call(arr,0,3);
        console.log(arr1);

arr数组调用数组方法slice,call中放入slice的参数输出为:

格式有所不同。但是这样的实现实际上在每一次创建对象时都会去走一遍父级构造函数所以出现了下面这种实际运用最多的模式

二、圣杯模式继承

直接撸上代码理解

Father.prototype.hobby="football";
        function Father(age){
            this.age = age; 
        }
        function Son(name){
            this.name = name;
        }
        function inherit (a,b){
            function F(){};
            F.prototype=a.prototype;
            b.prototype=new F();
            b.prototype.constuctor=b;
        }
        inherit(Father,Son);
        var father =new Father(31);
        var son=new Son("xiaoli");

使对象通用一个原型来继承属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值