• call 和 apply 和 bind的区别


    有些东西说忘就往,每天记录自己忘记的东西重新学习一遍,挺好

    作用:call()和apply()用法都是一样的,改变this的指向问题 

    区别:接收参数的方式不同,

    (bind 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向),

    (bind和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经改变了 this 指向的函数)

    1.call

    call 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

    语法: 函数名.call(要改变的 this 指向,要给函数传递的参数1,要给函数传递的参数2, ...)

      (第一个参数是你要改变的函数内部的 this 指向)

      (第二个参数开始,依次是向函数传递参数)

    //实例1
    var a = 1
    function fn1(){
        console.log(this)
    }
    fn1()  // window
    fn1().call(1)  //1
    
    //实例2
    var obj = {
        a:"很好",
        fn2:function(res){
            console.log(res+this.a)
        }
    }
    obj.fn2("我")//我很好
    var co = {
        a:'很不好'
    }
    obj.fn2.call(co,"我")//我很不好

    2.apply

    apply 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

    语法: 函数名.apply(要改变的 this 指向,[要给函数传递的参数1, 要给函数传递的参数2, ...])

    var obj = {
        name : '王富贵'
    }
    function fn1(a,b) {
        console.log(this) //{name: "王富贵"}
        console.log(a+b) //3
    }
    fn1.apply(obj,[1,2])

    3.bind

    bind 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

    和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经改变了 this 指向的函数

    语法: var newFn = 函数名.bind(要改变的 this 指向); newFn(传递参数)

    var obj = {
        name : '王富贵'
    }
    function fn1(a,b) {
        console.log(this) //{name: "王富贵"}
        console.log(a+b) //5
    }
    var fn2 = fn1.bind(obj)//这里只能传一个参数  改变this的指向
    fn2(2,3)
    一辈子说长不长,说短不短,努力做好两件事:第一件事爱生活,爱身边的人,爱自己;第二件事是好好学习,好好工作,实现自己的人生价值观,而不仅仅是为了赚钱
  • 相关阅读:
    MYSQL之查询篇
    MYSQL之概念基础篇
    订餐系统之组合捜索
    订餐系统之微信点餐
    订餐系统之定时器Timer不定时
    订餐系统之地图订餐
    结构型模式:装饰模式
    结构型模式:组合模式
    结构型模式:桥接模式
    结构型模式:适配器模式
  • 原文地址:https://www.cnblogs.com/dcyd/p/12430088.html
Copyright © 2020-2023  润新知