call apply bind , new的原理 ,防抖和节流

call appply bind:

首先呢他们都是用来改变this指向的,但是他们也有区别

区别:

​ 1,传参不同:call通过“,”分隔的形式传递参数,前面是函数名

​ 例:函数名.call(目标对象,参数一,参数二)

​ apply参数使用数组进行传参

​ 例:函数名.apply(目标对象,参数一,参数二)

​ bind传参“,”分隔开,因为bind返回的是一个函数所以调用要加上括号

​ 例:函数名.bind(目标对象,参数一,参数二)()

​ 2,函数是否执行:首先呢call和apply都是直接调用的,而bind上需要加上小括号才能调用

call apply实现原理

​ call实现原理:call的原理是基于函数来实现的,

​ 主要做的事情是,给目标对象添加一个临时事件,实现后删除这个临时的事件,这个方法用到

​ 了argument来接收参数,在接收参数的时要去掉参数的第一个obj事件,利用eval执行字符串

​ 的方法

​ apply实现原理:apply基本是与call一样的实现原理,不过在接受参数的for循环时,它的参数是一个数组所

​ 已不用去删除第一个参数就可以了

new的原理

1,new的特点:

​ new一个构造函数会自动return一个对象

​ new完的实例化对象__proto__ 是自动指向构造函数的原型

​ new构造函数传参自动赋给当前实例化对象

防抖和节流

1,防抖:类似于 电梯 屏保 类的

​ 在固定时间内没有触发事件会在固定时间结束后触发,如果在固定时间内触发了就会延长固定时间

​ 防抖主要利用定时器实现

function debounce(func,wait) {
    var timer=null;
    return function() {
    //保存当前调用的dom对象
     var _this=this;
     //保存事件对象
     var args=arguments;
     clearTimeout(timer)
     timer=setTimeout(function() {
         func.apply(_this,args)
     },wait)
    }

2,节流:无论固定时间内是否触发,都会在固定时间后触发

​ 节流的实现方法有两种

​ 第一种:时间戳

//时间戳版本实现节流
function throttle(func,wait) {
    //定义初始时间
    var oldTime=0;

    return function() {
        var _this=this;
        var args=arguments;

        //当前时间戳
        var newTime=+new Date();

        //判断用当前时间减去旧的时间,如果大于wait指定的时间就会触发
        if(newTime-oldTime>wait) {
            //执行触发的函数
            func.apply(_this,args)
            //将旧时间更新
            oldTime=newTime;
        }

    }

​ 第二种:定时器

//时间戳版本实现节流
function throttle(func,wait) {
    var timer=null;

    return function() {
        var _this=this;
        var args=arguments;
       if(!timer) {
            timer=setTimeout(function() {
                timer=null;
                func.apply(_this,args)
            },wait)
       }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值