zoukankan      html  css  js  c++  java
  • apply,all,bind的区别

    这三个都是用来改变this指向的

    call() 和apply()的第一个参数相同,就是指定的对象。这个对象就是该函数的执行上下文。call()和apply()的区别就在于,两者接收的参数不一样。call的传参是这样的:

    fun.call(a,'wang mu'),apply的传参是这样的fun.apply(a,['wangmou']),bind的传参:fun.bind(a)('wang mu'),bind返回的时候仍然是一个函数,我们在调用的时候进行传参。bind不能立即执行,apply,call可以立即执行

    var a={
    user:' wang mu',
    fn:function(){
    console.log(this.user)
    }
    }
    var b = a.fn;
    b.call(a)
    

     

    var a={
    user:' wang mu',
    fn:function(){
    console.log(this.user)
    }
    }
    var c= a.fn;
    c.apply(a)
    

      

    var a={
    user:' wang mu',
    fn:function(){
    console.log(this.user)
    }
    }
    var d = a.fn;
    var e = d.bind(a)
    e()
    //当输入d的时候你可能想d.bind(a)就可以直接输出了,可是结果确没有,也说明bind确实是稍后执行,all,apply是立即执行

    bind会创建一个新函数,称为绑定函数

    bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。他是直接改变这个函数的this指向并且返回一个新的函数,之后再次调用这个函数的时候this都是指向bind绑定的第一个参数。bind传餐方式跟call方法一致。

  • 相关阅读:
    分布式事务之最终一致性BASE理论
    CAP理论
    Comparator中返回0导致数据丢失的大坑
    电脑主板分类
    SimpleDateFormat线程不安全
    Redis面试题
    JS闭包
    ES6将两个数组合并成一个对象数组
    视频色彩空间RGB、YUV、YCbCr
    c#接口作用的深入理解
  • 原文地址:https://www.cnblogs.com/smdb/p/10766445.html
Copyright © 2011-2022 走看看